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 中使用

MIT 许可证

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