4 releases
0.2.2 | Nov 15, 2023 |
---|---|
0.2.1 | Nov 12, 2023 |
0.2.0 | Nov 11, 2023 |
0.1.0 | Oct 31, 2023 |
#1963 in Rust patterns
100 downloads per month
9KB
113 lines
light_enum
A crate providing a derive keyword to generate a light enum.
Usage
cargo add light_enum
This crate provide two derive keywords:
LightEnum
will generate a new enum without the content of each fieldValues
will generate a vector containing each field of the enum
See examples bellow to understand what they do.
LightEnum
use light_enum::LightEnum;
#[derive(LightEnum)]
enum MyEnum {
A(i32, i32),
B(i32),
C,
}
let heavy = MyEnum::A(0, 0);
let light = heavy.to_light();
assert!(light == MyEnumLight::A);
MyEnumLight
will be generated:
enum MyEnumLight {
A,
B,
C,
}
Values
use light_enum::Values;
#[derive(Values, PartialEq, Eq)]
enum Vals {
A,
B,
C,
}
let values = Vals::VALUES;
assert!(values.len() == 3);
assert!(values.contains(&Vals::A));
assert!(values.contains(&Vals::B));
assert!(values.contains(&Vals::C));
Generated code:
impl Vals {
const VALUES: [Vals; 3usize] = [Vals::A, Vals::B, Vals::C];
}
Limitations
Values
Having a field with content will cause an error.
// this code will not compile
#[derive(Values)]
enum MyEnum {
A(i32),
}
Dev
The cargo expand
utility is useful to see what is generated. It can be installed with cargo install cargo-expand
.
Dependencies
~240–690KB
~16K SLoC