#tags #variant #derive #tagged-unions

tagname

获取枚举中变体的名称作为字符串

5 个不稳定版本

0.3.1 2022 年 12 月 22 日
0.3.0 2022 年 11 月 17 日
0.2.1 2022 年 11 月 8 日
0.2.0 2022 年 10 月 29 日
0.1.1 2022 年 10 月 20 日

#2239 in Rust 模式

MIT 许可证

7KB

tagname

github crates.io docs.rs build status

此库导出了一个名为 TagName 的 trait,它公开了一个 tag_name 方法,用于检索当前在 enum 值中持有的变体的名称(标记)。

更重要的是,与 TagName trait 一起来的还有一个 derive(TagName) 宏,它可以自动实现此 trait。

use tagname::TagName;

#[derive(TagName)]
enum MyTaggedUnion {
    #[tag(case = "lower")]
    Yes,
    #[tag(case = "upper")]
    No,
    Maybe(usize),
}

#[test]
fn return_correct_tag_names() {
    let v1 = MyTaggedUnion::Yes;
    let v2 = MyTaggedUnion::No;
    let v3 = MyTaggedUnion::Maybe(1);
    assert_eq!(v1.tag_name(), "yes");
    assert_eq!(v2.tag_name(), "NO");
    assert_eq!(v3.tag_name(), "Maybe");
}

依赖关系

~1.5MB
~36K SLoC