diff --git a/src/generate.rs b/src/generate.rs index e5da6da..9eb4c88 100644 --- a/src/generate.rs +++ b/src/generate.rs @@ -53,8 +53,9 @@ fn has_prefix_attr(f: &Field) -> bool { let inner = f .attrs .iter() - .filter_map(|v| { - let meta = v.parse_meta().expect("Could not get attribute"); + .filter_map(|v| v.parse_meta().ok()) + .filter_map(|meta| { + let meta = ; if ["get", "get_copy"] .iter() .any(|ident| meta.path().is_ident(ident)) @@ -104,8 +105,8 @@ pub fn implement(field: &Field, mode: &GenMode, params: &GenParams) -> TokenStre let attr = field .attrs .iter() - .filter_map(|v| { - let meta = v.parse_meta().expect("attribute"); + .filter_map(|v| v.parse_meta().ok()) + .filter_map(|meta| { if meta.path().is_ident("doc") { doc.push(v); None diff --git a/src/lib.rs b/src/lib.rs index 6e24831..906e4ca 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -234,14 +234,8 @@ pub fn setters(input: TokenStream) -> TokenStream { fn parse_global_attr(attrs: &[syn::Attribute], attribute_name: &str) -> Option { attrs .iter() - .filter_map(|v| { - let meta = v.parse_meta().expect("attribute"); - if meta.path().is_ident(attribute_name) { - Some(meta) - } else { - None - } - }) + .filter_map(|v| v.parse_meta().ok()) // non "meta" attributes are not our concern + .filter(|meta| meta.path().is_ident(attribute_name)) .last() }