#枚举 #开放 #整数 #整数值 #新类型

无 std 程序+库 open-enum

用于生成“开放”的无字段枚举的属性,这些枚举可以接受任何整数值,通过使用新类型结构和关联常量实现

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

Download history 1256/week @ 2024-04-26 1446/week @ 2024-05-03 996/week @ 2024-05-10 1069/week @ 2024-05-17 1274/week @ 2024-05-24 1133/week @ 2024-05-31 1209/week @ 2024-06-07 1214/week @ 2024-06-14 954/week @ 2024-06-21 1053/week @ 2024-06-28 1336/week @ 2024-07-05 1532/week @ 2024-07-12 1137/week @ 2024-07-19 1135/week @ 2024-07-26 1585/week @ 2024-08-02 1359/week @ 2024-08-09

每月下载量 5,357
2 个 crate 中使用

Apache-2.0

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