rs_data_formats_derive/
lib.rs

1extern crate proc_macro;
2
3use proc_macro::TokenStream;
4use quote::quote;
5use syn;
6
7#[proc_macro_derive(Name)]
8pub fn name_derive(input: TokenStream) -> TokenStream {
9    let ast = syn::parse(input).unwrap();
10
11    impl_name(&ast)
12}
13
14fn impl_name(ast: &syn::DeriveInput) -> TokenStream {
15    let name = &ast.ident;
16    let gen = quote! {
17        impl Name for #name {
18            fn name(&self) -> &'static str {
19                stringify!(#name)
20            }
21        }
22    };
23    gen.into()
24}