[][src]Macro macro_attr_2018::macro_attr

macro_rules! macro_attr {
    ($($item:tt)*) => { ... };
}

When given an item definition, including its attributes, this macro parses said attributes and dispatches any attributes or derivations suffixed with ! to user-defined macros. This allows multiple macros to process the same item.

Given the following input:

This example is not tested
#[derive(Copy, Name!(args...), Clone, Another!, Debug)]
struct Foo;

macro_attr! will expand to the equivalent of:

This example is not tested
#[derive(Copy, Clone, Debug)]
struct Foo;

Name!((args...) struct Foo;);
Another!(() struct Foo;);

Note that macro derives may be mixed with regular derives, or put in their own #[derive(...)] attribute. Also note that macro derive invocations are not passed the other attributes on the item; input will consist of the arguments provided to the derivation (i.e. (args...) in this example), the item's visibility (if any), and the item definition itself.

A macro derivation invoked without arguments will be treated as though it was invoked with empty parentheses. i.e. #[derive(Name!)] is equivalent to #[derive(Name!())].

A derivation macro may expand to any number of new items derived from the provided input.