2 个不稳定版本
0.2.0 | 2022年9月22日 |
---|---|
0.1.0 | 2022年9月11日 |
#1574 在 算法
在 3 crates 中使用
5KB
无差别映射
可以使用指定自定义差异创建普通 rust 枚举
enum MyEnum {
A = 1,
B = 2
}
甚至可以指定特定的整数类型作为底层类型
#[repr(u8)]
enum MyByteEnum {
A = 1,
B = 2
}
然而,整数和枚举之间的转换可能会很繁琐,并且如果枚举情况没有完全覆盖,可能会导致错误。即使是 u8 枚举,覆盖 256 种可能性也是不可行的。
为了解决这个问题,您可以将 indiscriminant 属性应用于枚举
#[indiscriminant_bits(u8, 1)]
enum MyDiscriminantEnum {
A = 0,
B = 1
}
其中第一个参数是底层整数类型,第二个参数是解释为枚举的底层整数的最低有效位。
您还可以指定在将整数转换为枚举时,整数是否应该为零除了枚举字段
#[indiscriminant_bits(u8, 1)]
enum MyDiscriminantEnum {
A = 0,
B = 1
}
您不需要指定您指定的枚举的每个可能值,但如果不是这样,则需要添加一个无值字段,名为 Default
#[indiscriminant_bits(u8, 2)]
enum MyDiscriminantEnum {
A = 0,
B = 1,
Default
}
如果默认情况将存在,则默认选项必须是最后一个。indiscriminant 属性还为每个应用的枚举提供了两个函数
let a: u8 = MyDiscriminantEnum::A.to_int();
let b: MyDiscriminantEnum = MyDiscriminantEnum::from_int(a);
这些函数保证成功,因此当枚举定义时,需要在必要时对 Default 字段提出要求。
依赖关系
~1.5MB
~36K SLoC