Peternator7/strum (strum)
### [`v0.26.0`](https://togithub.com/Peternator7/strum/blob/HEAD/CHANGELOG.md#0260)
##### 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.
##### 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.
```rust
use strum::VariantArray;
#[derive(Debug, VariantArray)]
enum Color {
Red,
Blue,
Green,
}
fn main() {
println!("{:?}", Color::VARIANTS); // prints: ["Red", "Blue", "Green"]
}
```
- The `EnumMap` 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.
```rust
use strum::EnumMap;
#[derive(Copy, Clone, Debug, EnumMap)]
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](https://togithub.com/Peternator7/strum/pull/322): avoid collisions on `std::fmt::Debug`
- [#321](https://togithub.com/Peternator7/strum/pull/321): avoid conflicts with consecutive underscores.
- [#314](https://togithub.com/Peternator7/strum/pull/314): add additional bounds to EnumIterator
- [#311](https://togithub.com/Peternator7/strum/pull/311): add FusedIterator bounds to EnumIterator
- [#297](https://togithub.com/Peternator7/strum/pull/297): New macro, add `VariantArray`
- [#296](https://togithub.com/Peternator7/strum/pull/296): adds prefix attribute to To/From String macros.
- [#294](https://togithub.com/Peternator7/strum/pull/294): use named enum fields in to_string macro.
Configuration
📅 Schedule: Branch creation - "before 4am on Monday" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
â™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.
[ ] If you want to rebase/retry this PR, check this box
This PR has been generated by Mend Renovate. View repository job log here.
This PR contains the following updates:
0.25
->0.26
0.25
->0.26
Release Notes
Peternator7/strum (strum)
### [`v0.26.0`](https://togithub.com/Peternator7/strum/blob/HEAD/CHANGELOG.md#0260) ##### 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. ##### 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. ```rust use strum::VariantArray; #[derive(Debug, VariantArray)] enum Color { Red, Blue, Green, } fn main() { println!("{:?}", Color::VARIANTS); // prints: ["Red", "Blue", "Green"] } ``` - The `EnumMap` 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. ```rust use strum::EnumMap; #[derive(Copy, Clone, Debug, EnumMap)] 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](https://togithub.com/Peternator7/strum/pull/322): avoid collisions on `std::fmt::Debug` - [#321](https://togithub.com/Peternator7/strum/pull/321): avoid conflicts with consecutive underscores. - [#314](https://togithub.com/Peternator7/strum/pull/314): add additional bounds to EnumIterator - [#311](https://togithub.com/Peternator7/strum/pull/311): add FusedIterator bounds to EnumIterator - [#297](https://togithub.com/Peternator7/strum/pull/297): New macro, add `VariantArray` - [#296](https://togithub.com/Peternator7/strum/pull/296): adds prefix attribute to To/From String macros. - [#294](https://togithub.com/Peternator7/strum/pull/294): use named enum fields in to_string macro.Configuration
📅 Schedule: Branch creation - "before 4am on Monday" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
â™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.
This PR has been generated by Mend Renovate. View repository job log here.