synstructure

Macro decl_derive

Source
macro_rules! decl_derive {
    ([$derives:ident $($derive_t:tt)*] => $(#[$($attrs:tt)*])* $inner:path) => { ... };
}
Expand description

The decl_derive! macro declares a custom derive wrapper. It will parse the incoming TokenStream into a synstructure::Structure object, and pass it into the inner function.

Your inner function should take a synstructure::Structure by value, and return a type implementing synstructure::MacroResult, for example:

fn derive_simple(input: synstructure::Structure) -> proc_macro2::TokenStream {
    unimplemented!()
}

fn derive_result(input: synstructure::Structure)
    -> syn::Result<proc_macro2::TokenStream>
{
    unimplemented!()
}

§Usage

§Without Attributes

fn derive_interesting(_input: synstructure::Structure) -> proc_macro2::TokenStream {
    quote::quote! { ... }
}

decl_derive!([Interesting] => derive_interesting);

§With Attributes

fn derive_interesting(_input: synstructure::Structure) -> proc_macro2::TokenStream {
    quote::quote! { ... }
}

decl_derive!([Interesting, attributes(interesting_ignore)] => derive_interesting);

§Decl Attributes & Doc Comments

fn derive_interesting(_input: synstructure::Structure) -> proc_macro2::TokenStream {
    quote::quote! { ... }
}

decl_derive! {
    [Interesting] =>
    #[allow(some_lint)]
    /// Documentation Comments
    derive_interesting
}

This macro is available if synstructure is built with the "proc-macro" feature.