5个版本
0.1.2 | 2023年7月18日 |
---|---|
0.1.1 | 2022年6月4日 |
0.1.0 | 2022年6月4日 |
0.0.2 | 2022年5月29日 |
0.0.1 | 2022年5月29日 |
在 #判别式 中排名 22
在 discrim 中使用
7KB
70 行
discrim
从判别式构造枚举变体
注意:由于存在 soccer
,我不再维护这个库;我已经将在这里构建的大部分内容吸收到那个新库中,我将从现在开始维护该库。如果您对这个库感兴趣,您应该使用 soccer
(它更好,我保证)。
概述
为了从判别式初始化某些枚举值,您基本上必须手动编写一个巨大的匹配块,该块将每个判别式映射到相应的变体。这是一个既繁琐又可能不安全的流程;例如,如果在枚举定义中更改判别式值后忘记更新匹配中的判别式值,会怎样?
该库通过提供一种自动生成该初始化代码的方法来解决这个问题。更具体地说,对于无字段、非泛型枚举,如果指定了 #[repr(...)]
,它提供 FromDiscriminant
特性和相应的 derive 宏,该宏自动生成作为 trait 实现的初始化代码。
本项目采用MIT许可证。
示例
一个简单示例,基于激发该库开始的用例
use discrim::FromDiscriminant;
#[derive(Debug, FromDiscriminant)]
#[repr(u8)]
enum Opcode {
Add, Sub, Mul, Div,
}
fn main() {
// prints "Ok(Mul)"
println!("{:?}", Opcode::from_discriminant(2));
// prints "Err(5)"
println!("{:?}", Opcode::from_discriminant(5));
}
依赖关系
~1.5MB
~34K SLoC