macro_rules_attr
Use declarative macros as proc_macro attributes. (#[apply] / #[extend] your macro_rules!)
Usage
#[apply]
First, bring the apply attribute macro into scope:
use apply;
Then, define your macro using macro_rules!:
/// Your macro that you want to use as an attribute.
Finally, annotate your item with the apply attribute macro:
# use apply;
#
# /// Your macro that you want to use as an attribute.
#
#
// Expands to:
the_macro!
Additional tokens are appended after the annotated item:
# use apply;
#
# /// Your macro that you want to use as an attribute.
#
#
// Expands to:
the_macro!
#[extend]
The extend attribute macro works like apply, but it keeps the original item instead of consuming it, similar to how #[derive] works. For example:
use extend;
/// Simple macro that generates a `hello` function for given struct, which returns `Hello, {name}!`. If given a second argument, it will replace `{name}`.
$?
) => ;
}
// No additional tokens
assert_eq!;
// Additional tokens
assert_eq!;
Cargo Features
log: Enable logging with thelogcrate. (Requireslogas a dependency)
Comparison
This crate is heavily inspired by macro_rules_attribute, but differs in the following ways:
macro_rules_attris more lightweight and has no dependencies by default.- Less than 100 lines of code. (Excluding tests and documentation)
- You can enable logging with the
logfeature, which requireslogas a dependency. pasteis required as a dev-dependency for the tests.
macro_rules_attronly has#[apply]and#[extend], whilemacro_rules_attributeprovides more.macro_rules_attrallows you to append any tokens after the annotated item, whilemacro_rules_attributedoes not.