diff --git a/clap_derive/src/derives/args.rs b/clap_derive/src/derives/args.rs index c801eeb9..5117a4d2 100644 --- a/clap_derive/src/derives/args.rs +++ b/clap_derive/src/derives/args.rs @@ -241,7 +241,7 @@ pub fn gen_augment( } } Kind::Arg(ty) => { - let convert_type = inner_type(**ty, &field.ty); + let convert_type = inner_type(&field.ty); let occurrences = *attrs.parser().kind == ParserKind::FromOccurrences; let flag = *attrs.parser().kind == ParserKind::FromFlag; @@ -524,7 +524,7 @@ fn gen_parsers( let parser = attrs.parser(); let func = &parser.func; let span = parser.kind.span(); - let convert_type = inner_type(**ty, &field.ty); + let convert_type = inner_type(&field.ty); let id = attrs.id(); let (get_one, get_many, deref, mut parse) = match *parser.kind { FromOccurrences => ( diff --git a/clap_derive/src/utils/ty.rs b/clap_derive/src/utils/ty.rs index 891aa37d..1bd23c76 100644 --- a/clap_derive/src/utils/ty.rs +++ b/clap_derive/src/utils/ty.rs @@ -40,8 +40,9 @@ impl Ty { } } -pub fn inner_type(ty: Ty, field_ty: &syn::Type) -> &syn::Type { - match ty { +pub fn inner_type(field_ty: &syn::Type) -> &syn::Type { + let ty = Ty::from_syn_ty(field_ty); + match *ty { Ty::Vec | Ty::Option => sub_type(field_ty).unwrap_or(field_ty), Ty::OptionOption | Ty::OptionVec => { sub_type(field_ty).and_then(sub_type).unwrap_or(field_ty)