duplicate
Attribute macro for code duplication with substitution.
Motivation
If you find yourself in need of copying a block of code and then making some small changes to fit the new use case, this crate is for you.
The duplicate
attribute macro will duplicate an item any number of times while inserting custom code in the designated places in each duplicate.
For an in-depth explanation of the syntax and features, see the documentation.
Example
use duplicate;
/// Trait we want to implement for u8, u16, and u32
assert!;
assert!;
assert!;
Expands to:
use duplicate;
/// Trait we want to implement for u8, u16, and u32
assert!;
assert!;
assert!;
Changelog
This project adheres to Semantic Versioning. During initial development (with versions 0.y.z), bumps to the minor version (y) signify breaking changes.
Added
- Short syntax now supports nested macro invocations. Can only be used after the initial list of substitution identifiers. See #2.
Changed
- Updated documentation. The short syntax is now used for the primary examples.
- Crate readme license section no longer includes paragraph on the licensing of contibutions.
Fixed
- Fixed an issue where
#[duplicate(..)]
would throw an error if it was generated by a macro expansion. It would fail if a substitution identifier originated from a macro variable. This is caused by the variable's expansion sometimes being wrapped in a group with no delimiters, whichduplicate
couldn't handle.
This changelog format is based on Keep a Changelog and shows only the changes since the previous version. See the full changelog for changes to all released versions.