#enums #proc-macro #derive

unit-enum

为Rust中类似单元的枚举推导出序数方法的进程宏

4个稳定版本

1.3.0 2024年7月15日
1.2.0 2024年7月5日
1.1.0 2024年6月27日
1.0.0 2024年3月17日

过程宏中排名242

Download history 143/week @ 2024-06-26 114/week @ 2024-07-03 104/week @ 2024-07-10 19/week @ 2024-07-17 1/week @ 2024-07-24

每月下载239

MIT/Apache

10KB
94

UnitEnum库文档

unit-enum库提供了一个名为UnitEnum的过程宏,旨在增强Rust中的枚举,特别是仅由单元变体组成的枚举。此宏通过提供有用的实用方法简化了此类枚举的处理。

功能

  • name:检索枚举变体的名称。
  • ordinal:检索枚举变体的序数,从0开始。
  • from_ordinal:如果可能,将序数转换回枚举变体。
  • discriminant:检索枚举变体的区分符。
  • from_discriminant:将区分符转换回枚举变体。
  • len:获取枚举中的变体总数。
  • values:返回枚举所有变体的迭代器,允许轻松迭代和处理每个变体。

限制

  • 仅适用于具有单元变体的枚举。
  • 不支持携带数据的或元组的枚举变体,会导致编译时错误。

安装

将以下内容添加到你的Cargo.toml

[dependencies]
unit-enum = "1.3.0"

快速入门

use unit_enum::UnitEnum;

#[derive(Debug, Clone, Copy, PartialEq, UnitEnum)]
enum Color {
    Red = 10,
    Green,
    Blue = 45654
}

fn main() {
    println!("Name of Blue: {:?}", Color::Blue.name());
    // Name of Blue: "Blue"

    println!("Ordinal of Green: {:?}", Color::Green.ordinal());
    // Ordinal of Green: 1

    println!("Value of ordinal 2: {:?}", Color::from_ordinal(2));
    // Value of ordinal 2: Some(Blue)

    println!("Value of ordinal 4: {:?}", Color::from_ordinal(4));
    // Value of ordinal 4: None

    println!("Discriminant of Blue: {:?}", Color::Blue.discriminant());
    // Discriminant of Blue: 45654

    println!("Discriminant of Green: {:?}", Color::Green.discriminant());
    // Discriminant of Green: 11

    println!("Value of discriminant 10: {:?}", Color::from_discriminant(10));
    // Value of discriminant 10: Some(Red)

    println!("Value of discriminant 0: {:?}", Color::from_discriminant(0));
    // Value of discriminant 0: None

    println!("Number of Color variants: {:?}", Color::len());
    // Number of Color variants: 3

    println!("List of Color variants: {:?}", Color::values().collect::<Vec<_>>());
    // List of Color variants: [Red, Green, Blue]
}

贡献

欢迎贡献!请随时提交拉取请求或在我们的GitHub仓库上打开问题。

许可证

本项目许可协议为MIT或Apache-2.0,由您选择。

依赖项

~265–710KB
~17K SLoC