#tags #label #serde #rfc1035

just-a-tag

一种 #tag-type,兼容RFC 1035 DNS标签

1 个不稳定版本

0.1.1 2023年7月18日
0.1.0 2023年7月18日

#1366编码


k8sfwd 中使用

EUPL-1.2

24KB
392

只是一个标签。

这个crate包含了一个Tag类型,这是一个与RFC 1035 DNS标签兼容的字符串,具有FromStr解析和可选的serde支持。

标签示例

use justatag::Tag;

fn tags() {
    assert_eq!(Tag::new("some-tag"), "some-tag");
    assert_eq!(Tag::from_str("some-tag").unwrap(), "some-tag");
    assert!(Tag::from_str("invalid-").is_err());
}

标签的联合

这个名字与crate的名称不完全相符,它还提供了TagUnion类型,它表示(不出所料,这次)标签的联合。

use std::collections::HashSet;
use justatag::{MatchesAnyTagUnion, Tag, TagUnion};

fn tag_unions() {
    let union = TagUnion::from_str("foo").unwrap();
    assert!(union.contains(&Tag::new("foo")));
    assert_eq!(union.len(), 1);

    let union = TagUnion::from_str("foo+bar").unwrap();
    assert!(union.contains(&Tag::new("foo")));
    assert!(union.contains(&Tag::new("bar")));
    assert_eq!(union.len(), 2);

    // TagUnions are particularly interesting when bundled up.
    let unions = vec![
        TagUnion::from_str("bar+baz").unwrap(),
        TagUnion::from_str("foo").unwrap()
    ];

    // foo matches
    let set_1 = HashSet::from_iter([Tag::new("foo"), Tag::new("bar")]);
    assert!(unions.matches_set(&set_1));

    // bar+baz matches
    let set_2 = HashSet::from_iter([Tag::new("fubar"), Tag::new("bar"), Tag::new("baz")]);
    assert!(unions.matches_set(&set_2));

    // none match
    let set_3 = HashSet::from_iter([Tag::new("fubar"), Tag::new("bar")]);
    assert!(!unions.matches_set(&set_3));
}

依赖

~175KB