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}