1 个不稳定版本
0.1.0 | 2022年2月23日 |
---|
#2308 在 Rust 模式
172 每月下载量
用于 3 个 crate(2 个直接使用)
5KB
enum-tags
一个 Derive-Macro 库,可以为任何枚举生成伴随标签枚举,以便在不指定字段的情况下引用变体。
使用方法
将以下内容添加到您的 Cargo.toml 中
[dependencies]
enum-tags = "0.1.0"
然后为任何您想要生成伴随标签枚举的枚举类型使用 derive [Tag
]。
#[derive(Tag)]
enum MyEnum {
A,
B = 1024,
C(char),
D { x: i32, y: i32 },
}
生成的枚举将如下所示
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
enum MyEnumTag {
A,
B = 1024,
C,
D,
}
为 TaggedEnum
特性生成的实现也将被生成,以便将您的枚举类型转换为标签枚举。生成的实现将如下所示
impl ::enum_tags_traits::TaggedEnum for MyEnum {
type Tag = MyEnumTag;
fn tag(&self) -> Self::Tag {
match *self {
Self::A => Self::Tag::A,
Self::B => Self::Tag::B,
Self::C(_) => Self::Tag::C,
Self::D { x: _, y: _ } => Self::Tag::D,
}
}
}
lib.rs
:
测试结构
use enum_tags::Tag;
#[derive(Tag)]
struct Bad {}
测试联合
use enum_tags::Tag;
#[derive(Tag)]
union Bad {}
依赖项
~1.5MB
~35K SLoC