#枚举 #变体 #宏推导 #伴随 #生成 #字段 #指定

enum-tags

一个 Derive-Macro 库,可以为任何枚举生成伴随标签枚举,以便在不指定字段的情况下引用变体

1 个不稳定版本

0.1.0 2022年2月23日

#2308Rust 模式

Download history 17/week @ 2024-03-11 8/week @ 2024-03-18 17/week @ 2024-03-25 39/week @ 2024-04-01 7/week @ 2024-04-08 59/week @ 2024-04-15 70/week @ 2024-04-22 44/week @ 2024-04-29 15/week @ 2024-05-06 33/week @ 2024-05-13 25/week @ 2024-05-20 38/week @ 2024-05-27 53/week @ 2024-06-03 47/week @ 2024-06-10 49/week @ 2024-06-17 22/week @ 2024-06-24

172 每月下载量
用于 3 个 crate(2 个直接使用)

MIT 许可证

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