This is how I'm trying to get myattr attribute inside macro, but it's not working.
named.named.iter() is an empty iterator.
#[myattr = "something"]
#[derive(MyMacro)]
pub struct MyStruct {}
#[proc_macro_derive(MyMacro, attributes(myattr))]
pub fn my_drive(input: TokenStream) -> TokenStream {
let ast = parse_macro_input!(input as DeriveInput);
let struct_: syn::DataStruct = match ast.clone().data {
syn::Data::Struct(data) => data,
_ => panic!("Usage of #[Modbus] on a non-struct type"),
};
match &struct_.fields {
syn::Fields::Named(named) => for field in named.named.iter() {
let name = field.ident.as_ref().unwrap();
let number = field.attrs.iter().filter_map(|attr| {
match attr.parse_meta() {
Result::Ok(syn::Meta::NameValue(attr)) if attr.path.is_ident("myattr") => {
println!("found it!");
Some(attr.lit)
},
_ => None,
}
}).nth(0);
}
_ => unimplemented!()
}
(quote! {}).into()
}