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 日 |
在 #判别式 中排名 13
每月下载 47 次
6KB
discrim
从判别式构建枚举变体
注意:由于存在 soccer
,我不再维护这个项目;我已经将这里构建的大部分内容吸收到那个新的 crate 中,我将从现在开始维护它。如果您对这个 crate 感兴趣,您应该使用 soccer
(它更好,我保证)。
概述
为了从判别式初始化某些枚举值,您基本上必须手动编写一个巨大的匹配块,将每个判别式映射到相应的变体。这是一个既繁琐又可能不安全的操作;例如,如果在枚举定义中更改判别式值后忘记更新匹配中的判别式值怎么办?
该 crate 通过提供一种自动生成初始化代码的方法来解决这个问题。更具体地说,对于无字段、非泛型枚举,它提供了 FromDiscriminant
trait 和相应的 derive 宏,该宏自动生成 trait 的实现代码。
本项目采用 MIT 许可证。
示例
一个简单的示例,基于激发该 crate 的用例
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
~36K SLoC