diff options
Diffstat (limited to 'src/transform.rs')
-rw-r--r-- | src/transform.rs | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/transform.rs b/src/transform.rs index c3116cf..6640cf3 100644 --- a/src/transform.rs +++ b/src/transform.rs @@ -7,10 +7,10 @@ use syn::{ }; use crate::{ + filter_map_assoc_paths, match_assoc_type, parse_assoc_type::DestType, parse_trait_sig::{MethodParseError, TypeTransform}, - syn_utils::{find_in_path, find_in_type}, - AssocTypeMatcher, + syn_utils::{iter_path, iter_type}, }; #[derive(Default)] @@ -23,7 +23,7 @@ pub enum TransformError { impl AssocTypeConversions<'_> { pub fn parse_type_path(&self, type_: &mut Type) -> Result<TypeTransform, TransformError> { - let assoc_span = match find_in_type(type_, &AssocTypeMatcher) { + let assoc_span = match iter_type(type_).filter_map(filter_map_assoc_paths).next() { Some(path) => path.span(), None => return Ok(TypeTransform::NoOp), }; @@ -49,7 +49,7 @@ impl AssocTypeConversions<'_> { if args.args.len() == 1 { if let GenericArgument::Type(generic_type) = args.args.first_mut().unwrap() { - if find_in_type(generic_type, &AssocTypeMatcher).is_some() { + if iter_type(generic_type).any(match_assoc_type) { return Ok(TypeTransform::Map( self.parse_type_path(generic_type)?.into(), )); @@ -65,8 +65,8 @@ impl AssocTypeConversions<'_> { if let (GenericArgument::Type(ok_type), GenericArgument::Type(err_type)) = (args_iter.next().unwrap(), args_iter.next().unwrap()) { - if find_in_type(ok_type, &AssocTypeMatcher).is_some() - || find_in_type(err_type, &AssocTypeMatcher).is_some() + if iter_type(ok_type).any(match_assoc_type) + || iter_type(err_type).any(match_assoc_type) { return Ok(TypeTransform::Result( self.parse_type_path(ok_type)?.into(), @@ -85,7 +85,7 @@ impl AssocTypeConversions<'_> { if let GenericArgument::Type(generic_type) = args.args.first_mut().unwrap() { - if find_in_type(generic_type, &AssocTypeMatcher).is_some() { + if iter_type(generic_type).any(match_assoc_type) { return Ok(TypeTransform::Map( self.parse_type_path(generic_type)?.into(), )); @@ -146,7 +146,10 @@ pub fn dynamize_function_bounds( } } } - if let Some(path) = find_in_path(&bound.path, &AssocTypeMatcher) { + if let Some(path) = iter_path(&bound.path) + .filter_map(filter_map_assoc_paths) + .next() + { return Err(( path.span(), MethodParseError::UnconvertibleAssocTypeInTraitBound, |