-
Notifications
You must be signed in to change notification settings - Fork 151
Macro Renames
Not Deployed yet
In versions of Rust prior to 1.31.0, Rust didn't support importing macros by path.
They could only be brought into scope by #[macro_use]
. This can create collisions if two packages export the same macros.
See issue #30 for an example. To workaround this, Strum supports renaming specific macros using feature flags.
The table below shows for each macro, the corresponding feature flag, and the name of the macro after the feature is enabled.
Original Macro Name | Feature Flag | New Macro Name |
---|---|---|
EnumString |
verbose-enumstring-name | StrumEnumString |
AsRefStr |
verbose-asrefstr-name | StrumAsRefStr |
AsStaticStr |
verbose-asstaticstr-name | StrumAsStaticStr |
IntoStaticStr |
verbose-intostaticstr-name | StrumIntoStaticStr |
ToString |
verbose-tostring-name | StrumToString |
Display |
verbose-display-name | StrumDisplay |
EnumIter |
verbose-enumiter-name | StrumEnumIter |
EnumMessage |
verbose-enummessage-name | StrumEnumMessage |
EnumProperty |
verbose-enumproperty-name | StrumEnumProperty |
EnumDiscriminants |
verbose-enumdiscriminants-name | StrumEnumDiscriminants |
EnumCount |
verbose-enumcount-name | StrumEnumCount |
Example Cargo.toml
:
[dependencies]
strum = { version = "0.14" }
strum_macros = { version = "0.14", features = [ "verbose-tostring-name" ] }
Now instead of writing #[derive(ToString)]
, a library would instead write #[derive(StrumToString)]
. This way Strum can still be used in older versions of Rust without worrying about name collisions.
You do not need this in versions of rust >= 1.31. You can and should prefer importing macros by path use strum::ToString