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.