1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use proc_macro2::TokenStream;
use quote::quote;
use syn::DeriveInput;

#[proc_macro_derive(EmptyTraits, attributes(empty_traits))]
pub fn derive_empty_traits(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
    let DeriveInput { attrs, ident, .. } = syn::parse(input).unwrap();

    let traits = attrs
        .iter()
        .filter(|attr| attr.path().is_ident("empty_traits"))
        .map(|t| {
            t.parse_args::<TokenStream>()
                .expect("failed to parse Trait")
        });

    quote! {
        #(impl #traits for #ident {})*
    }
    .into()
}