#[derive(Debug, Default)] pub struct OptionsAttr { pub impl_with_generics: syn::punctuated::Punctuated, } impl syn::parse::Parse for OptionsAttr { fn parse(input: syn::parse::ParseStream) -> syn::Result { let params = input.parse_terminated(|param| param.parse::(), syn::Token![,])?; let mut impl_with_generics = syn::punctuated::Punctuated::new(); for param in params { let param = param.require_list()?; if !param.path.is_ident("impl_with_generics") { return Err(syn::Error::new_spanned( param, "Unrecognized attribute parameter", )); } impl_with_generics = param.parse_args_with( syn::punctuated::Punctuated::< syn::AngleBracketedGenericArguments, syn::Token![,], >::parse_terminated, )?; } Ok(Self { impl_with_generics }) } }