[−][src]Crate apply_macro
An attribute macro to apply function-like macros. It can improve the readability of your code.
This crate has no dependency so you don't need to worry about compile time.
Examples
use apply_macro::apply; macro_rules! common_derive { ($input:item) => { #[derive(Debug, PartialEq)] $input }; } #[apply(common_derive)] struct Num(i32); assert_eq!(Num(-1), Num(-1)); assert_ne!(Num(1), Num(-1)); #[apply(common_derive,)] struct TrailingCommaIsAllowed; assert_eq!(TrailingCommaIsAllowed, TrailingCommaIsAllowed);
The #[apply(common_derive)]
on Num
expands to:
common_derive! { struct Num(i32); }
Multiple arguments are allowed and seperated by commas:
use apply_macro::apply; macro_rules! derive_debug { { #[$attr:meta] // will receive `#[apply(derive_partial_eq)]` $input:item } => { #[$attr] // avoid "error: macro attributes must be placed before `#[derive]`" #[derive(Debug)] $input }; } macro_rules! derive_partial_eq { ($input:item) => { #[derive(PartialEq)] $input }; } #[apply(derive_debug, derive_partial_eq)] struct Num(i32); assert_eq!(Num(-1), Num(-1)); assert_ne!(Num(1), Num(-1)); #[apply(derive_debug, derive_partial_eq,)] struct TrailingCommaIsAllowed; assert_eq!(TrailingCommaIsAllowed, TrailingCommaIsAllowed);
Empty argument is also allowed (consistent with #[derive()]
):
use apply_macro::apply; #[apply()] #[derive()] // consistent struct EmptyArg;
Although, as a procedural macro, #[apply]
can't be banned:
use apply_macro::apply; #[apply] struct Oops;
Attribute Macros
apply | The main attribute macro of this crate. |