8 个版本 (4 个破坏性更新)
0.5.2 | 2024 年 6 月 17 日 |
---|---|
0.5.1 | 2024 年 5 月 29 日 |
0.5.0 | 2024 年 2 月 15 日 |
0.4.1 | 2023 年 11 月 18 日 |
0.1.0 | 2022 年 9 月 2 日 |
在 Rust 模式 中排名 #320
每月下载量 5,357
在 2 个 crate 中使用
21KB
106 行
open-enum
Rust 枚举是 封闭 的,这意味着区分枚举的整数值,其 区分符,必须是列出的变体之一。如果整数值不是这些区分符之一,则被视为立即 未定义行为。这对有字段和无字段的枚举都适用。这可能会在高性能代码中处理枚举变得麻烦,这些代码不能承受提前的运行时检查。如果作者不熟悉 编写不安全的 Rust 的规则,还可能在意外的时间引入未定义行为。
相比之下,C++ 的 范围枚举 是 开放 的,这意味着枚举是强类型整数,可以持有任何值,尽管有一个范围良好的已知值集。 open-enum
允许你在 Rust 中实现这一点。它将这个枚举声明转换为具有关联常量的元组结构
#[open_enum]
enum Color {
Red,
Green,
Blue,
Orange,
Black,
}
成为一个元组结构体与关联常量
#[derive(PartialEq, Eq)] // In order to work in `match`.
struct Color(pub u8); // Automatic integer type, can be specified.
impl Color {
pub const Red: Self = Color(0);
pub const Green: Self = Color(1);
pub const Blue: Self = Color(2);
pub const Orange: Self = Color(3);
pub const Black: Self = Color(4);
}
贡献
有关详细信息,请参阅 CONTRIBUTING.md
许可证
Apache 2.0;有关详细信息,请参阅 LICENSE
免责声明
本项目不是官方 Google 项目。Google 不支持该项目,并明确否认了其质量、可销售性或特定用途适用性的任何保证。
依赖关系
~270–730KB
~17K SLoC