struct_name_macro/
lib.rs

1use proc_macro::TokenStream;
2use quote::quote;
3use syn::parse_macro_input;
4use syn::DeriveInput;
5
6#[proc_macro_derive(StructName)]
7pub fn derive_struct_name(item: TokenStream) -> TokenStream {
8    let ast = parse_macro_input!(item as DeriveInput);
9    let struct_name = &ast.ident;
10
11    let expanded = quote! {
12        impl struct_name::StructName for #struct_name {
13            fn struct_name() -> &'static str {
14                stringify!(#struct_name)
15            }
16        }
17    };
18    expanded.into()
19}