4 个版本
0.2.2 | 2023 年 11 月 15 日 |
---|---|
0.2.1 | 2023 年 11 月 12 日 |
0.2.0 | 2023 年 11 月 11 日 |
0.1.0 | 2023 年 10 月 31 日 |
1024 在 Rust 模式 中排名
每月下载量 101 次
9KB
113 代码行
light_enum
一个提供 derive 关键字以生成轻量级枚举的 crate。
用法
cargo add light_enum
此 crate 提供两个 derive 关键字
LightEnum
会生成一个没有每个字段内容的枚举Values
会生成一个包含枚举每个字段的向量
请参见下面的示例以了解它们的功能。
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
将被生成
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));
生成的代码
impl Vals {
const VALUES: [Vals; 3usize] = [Vals::A, Vals::B, Vals::C];
}
限制
Values
如果字段包含内容,将导致错误。
// this code will not compile
#[derive(Values)]
enum MyEnum {
A(i32),
}
开发
cargo expand
工具很有用,可以查看生成的代码。它可以使用 cargo install cargo-expand
安装。
依赖项
~255–700KB
~17K SLoC