5 unstable releases

0.3.1 Dec 22, 2022
0.3.0 Nov 17, 2022
0.2.1 Nov 8, 2022
0.2.0 Oct 29, 2022
0.1.1 Oct 20, 2022

#273 in #variant


Used in tagname

MIT license

8KB
186 lines

tagname

github crates.io docs.rs build status

This library exports a trait called TagName that exposes a tag_name method which is used for retrieving a name (tag) of a currently hold variant within an enum value.

More importantly, together with TagName trait comes a derive(TagName) macro that can automatically implement the 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");
}

Dependencies

~1.5MB
~33K SLoC