Skip to content

Releases: Peternator7/strum

v0.26.2

13 Mar 16:55
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v0.26.1...v0.26.2

v0.26.1

01 Feb 05:06
Compare
Choose a tag to compare

0.26.1

  • #325: use core instead of std in VariantArray.

0.26.0

Breaking Changes

  • The EnumVariantNames macro has been renamed VariantNames. 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 constant VARIANTS 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 and serialize 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.