use proc_macro::TokenStream; use quote::quote; use syn::{parse_macro_input, Data, DataStruct}; #[proc_macro_derive(Getter)] pub fn getter(item: TokenStream) -> TokenStream { let input = parse_macro_input!(item as syn::DeriveInput); let ident = input.ident; let mut quote = quote! { println!("Test"); }; if let Data::Struct(DataStruct { fields, .. }) = input.data { for field in fields { let name = field.ident.unwrap(); quote.extend(quote! { println!("{}",stringify!(#name)); }) } } quote!( impl #ident { fn get() { #quote } } ) .into() }