Skip to content

Latest commit

 

History

History
35 lines (30 loc) · 1.47 KB

README.md

File metadata and controls

35 lines (30 loc) · 1.47 KB

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");
}