Releases: Peternator7/strum
v0.26.3
What's Changed
- Fix typos & misspellings in docs by @5-pebbles in #347
- Update
heck
requirement by @smoelius in #346 - Fix broken links by @rainbowatcher in #350
- Interpolate unnamed enum variant fields in to_string attribute by @gin-ahirsch in #345
- add hyperlinks to documentation and clarify derive macros by @lolbinarycat in #355
- Use fully qualified syntax for calling
get
on anEnumIter
, eliminating ambiguities by @bluurryy in #357
New Contributors
- @5-pebbles made their first contribution in #347
- @rainbowatcher made their first contribution in #350
- @gin-ahirsch made their first contribution in #345
- @lolbinarycat made their first contribution in #355
- @bluurryy made their first contribution in #357
Full Changelog: v0.26.2...v0.26.3
v0.26.2
What's Changed
- Fix AsRefStr docs to specify lifetime constraints by @DTrippe in #330
- Fix missing generics on impl for EnumTryAs by @hasali19 in #337
- feat(as_ref_str): enable
prefix
attribute forAsRefStr
derive by @vbrvk in #334 - Add dependabot by @oriontvv in #333
- Fix docs that say array instead of slice by @Peternator7 in #343
- Hide EnumTable by @Peternator7 in #344
- EnumTable will likely be deprecated.
New Contributors
- @DTrippe made their first contribution in #330
- @hasali19 made their first contribution in #337
- @vbrvk made their first contribution in #334
- @oriontvv made their first contribution in #333
Full Changelog: v0.26.1...v0.26.2
v0.26.1
0.26.1
- #325: use
core
instead ofstd
in VariantArray.
0.26.0
Breaking Changes
- The
EnumVariantNames
macro has been renamedVariantNames
. The deprecation warning should steer you in
the right direction for fixing the warning. - The Iterator struct generated by EnumIter now has new bounds on it. This shouldn't break code unless you manually
added the implementation in your code. Display
now supports format strings using named fields in the enum variant. This should be a no-op for most code.
However, if you were outputting a string like"Hello {field}"
, this will now be interpretted as a format string.- EnumDiscriminant now inherits the repr and discriminant values from your main enum. This makes the discriminant type
closer to a mirror of the original and that's always the goal.
New features
-
The
VariantArray
macro has been added. This macro adds an associated constantVARIANTS
to your enum. The constant
is a&'static [Self]
slice so that you can access all the variants of your enum. This only works on enums that only
have unit variants.use strum::VariantArray; #[derive(Debug, VariantArray)] enum Color { Red, Blue, Green, } fn main() { println!("{:?}", Color::VARIANTS); // prints: ["Red", "Blue", "Green"] }
-
The
EnumTable
macro has been experimentally added. This macro adds a new type that stores an item for each variant
of the enum. This is useful for storing a value for each variant of an enum. This is an experimental feature because
I'm not convinced the current api surface area is correct.use strum::EnumTable; #[derive(Copy, Clone, Debug, EnumTable)] enum Color { Red, Blue, Green, } fn main() { let mut counts = ColorTable::filled(0); for color in &[Color::Red, Color::Red, Color::Green]] { counts[color] += 1; } assert_eq!(counts[Color::Red], 2); assert_eq!(counts[Color::Blue], 0); assert_eq!(counts[Color::Green], 1); }
-
Display
has 2 new features:-
the
strum(prefix = "some_value")
attribute on an enum now allows you to prepend a string onto every
variant when you serialize it. -
Custom
to_string
andserialize
attributes now support string interopolation on serialization.
-
PR's Merged
- #322: avoid collisions on
std::fmt::Debug
- #321: avoid conflicts with consecutive underscores.
- #314: add additional bounds to EnumIterator
- #311: add FusedIterator bounds to EnumIterator
- #297: New macro, add
VariantArray
- #296: adds prefix attribute to To/From String macros.
- #294: use named enum fields in to_string macro.
- #288: discriminant enums now inherit the repr from the original enum.
- #279: Add
EnumTable
macro to generate a mapping between fieldless variants and data.