#枚举 #宏推导 #轻量 # #推导 #

二进制 light_enum

提供生成轻量级枚举的 derive 关键字

4 个版本

0.2.2 2023 年 11 月 15 日
0.2.1 2023 年 11 月 12 日
0.2.0 2023 年 11 月 11 日
0.1.0 2023 年 10 月 31 日

1024Rust 模式 中排名

Download history 12/week @ 2024-04-14 18/week @ 2024-04-21 27/week @ 2024-04-28 14/week @ 2024-05-05 9/week @ 2024-05-12 16/week @ 2024-05-19 19/week @ 2024-05-26 21/week @ 2024-06-02 23/week @ 2024-06-09 59/week @ 2024-06-16 32/week @ 2024-06-23 19/week @ 2024-06-30 22/week @ 2024-07-07 7/week @ 2024-07-14 40/week @ 2024-07-21 31/week @ 2024-07-28

每月下载量 101

MIT 许可证 MIT

9KB
113 代码行

light_enum

crates.io docs.rs license ci_status

一个提供 derive 关键字以生成轻量级枚举的 crate。

用法

cargo add light_enum

此 crate 提供两个 derive 关键字

  • LightEnum 会生成一个没有每个字段内容的枚举
  • Values 会生成一个包含枚举每个字段的向量

请参见下面的示例以了解它们的功能。

LightEnum

use light_enum::LightEnum;

#[derive(LightEnum)]
enum MyEnum {
    A(i32, i32),
    B(i32),
    C,
}

let heavy = MyEnum::A(0, 0);
let light = heavy.to_light();
assert!(light == MyEnumLight::A);

MyEnumLight 将被生成

enum MyEnumLight {
    A,
    B,
    C,
}

Values

use light_enum::Values;

#[derive(Values, PartialEq, Eq)]
enum Vals {
    A,
    B,
    C,
}

let values = Vals::VALUES;
assert!(values.len() == 3);
assert!(values.contains(&Vals::A));
assert!(values.contains(&Vals::B));
assert!(values.contains(&Vals::C));

生成的代码

impl Vals {
    const VALUES: [Vals; 3usize] = [Vals::A, Vals::B, Vals::C];
}

限制

Values

如果字段包含内容,将导致错误。

// this code will not compile
#[derive(Values)]
enum MyEnum {
    A(i32),
}

开发

cargo expand 工具很有用,可以查看生成的代码。它可以使用 cargo install cargo-expand 安装。

依赖项

~255–700KB
~17K SLoC