[−][src]Macro macro_attr_2018::macro_attr
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:
#[derive(Copy, Name!(args...), Clone, Another!, Debug)] struct Foo;
macro_attr!
will expand to the equivalent of:
#[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.