ToTokens for Opt {
}
}
-pub fn extract_type_option(typ: &syn::Type) -> Option {
+pub fn extract_type_option(typ: &syn::Type) -> Option {
if let syn::Type::Path(ref path) = typ {
let v = path.path.segments.last()?;
if v.value().ident == "Option" {
- if let syn::PathArguments::AngleBracketed(ref a) = v.value().arguments {
- let args = &a.args;
- return Some(quote!{ #args })
+ // Option has only one type argument in angle bracket.
+ if let syn::PathArguments::AngleBracketed(a) = &v.value().arguments {
+ if let syn::GenericArgument::Type(typ) = a.args.last()?.value() {
+ return Some(typ.clone())
+ }
}
}
}
@@ -253,4 +255,4 @@ pub fn expr_contains_ident(expr: &syn::Expr, ident: &Ident) -> bool {
visit::visit_expr(&mut visit, expr);
visit.result
-}
\ No newline at end of file
+}