Associated constants for Rust enums
NOTE: Tests and documentation are very much still a work in progress for the time being
soccer
can generate code to make treating a fieldless enum as a discrete set of constants easier by deriving TryFrom
, Into
, and Display
:
```rust
enum Punctuation { Plus, Minus, Star, Equals, }
fn main() { asserteq!(Punctuation::tryfrom('+'), Ok(Punctuation::Plus));
let val: char = Punctuation::Star.into();
assert_eq!(val, '*');
println!("{}", Punctuation::Minus); // prints "-"
} ```
It can also use the discriminant to do this:
```rust
enum Opcode { Add, Sub, Mul, Load, Store, }
fn main() { asserteq!(Opcode::tryfrom(0), Ok(Opcode::Add));
let val: u8 = Opcode::Load.into();
assert_eq!(val, 3);
println!("{}", Opcode::Store); // prints "4"
} ```
Those are both actual use cases I've encountered in my own Rust projects that motivated the creation of this crate.
(I used to maintain the https://github.com/a-lafrance/discrim crate for this discriminant-based conversion codegen, but since it got absorbed into soccer
I've archived it and don't work on it anymore)