#pattern-matching #pattern #uri #matching

uri-pattern-matcher

URI(或路径)模式匹配

5 个版本

0.1.4 2021年1月27日
0.1.3 2021年1月27日
0.1.2 2020年12月21日
0.1.1 2020年12月18日
0.1.0 2020年12月18日

#40 in #matching

每月下载量 24

MIT/Apache 许可

11KB
154

Uri-pattern-matcher

一个用于解析 URI(路径)模式、匹配它们并比较两个模式之间关系的 Rust 库。

此库速度快(解析常见模式仅需 1 到 10 微秒)且不使用任何额外分配。

由于尚未在生产环境中进行测试,该库被认为是未成熟的(1.0 版本之前),但考虑到其功能较少,使用起来应该相当安全。

用法

将以下内容添加到您的 Cargo.toml

[dependencies]
uri-pattern-matcher = "0.1"

示例

以下是此 crate 常见用法的示例

let pattern: UriPattern = "/api/{resource}/{id}/details".into();
assert!(pattern.is_match("/api/resource/id1/details"));
assert!(pattern.is_match("/api/customer/John/details"));
let pattern: UriPattern = "/api/{foo}/{bar}/zzz".into();
let pattern2: UriPattern = "/api/{foo}/bar/{zzz}".into();
assert_ne!(pattern, pattern2);
assert!(pattern > pattern2);

我们还可以使用迭代器将这些功能结合起来。以下示例将检索与候选字符串最具体的匹配模式

let patterns: Vec<UriPattern> = vec![
    "/api/{foo}/{bar}/zzz".into(),
    "/api/{foo}/bar/{zzz}".into(),
    "/{api}/{foo}/foo/{zzz}".into()
    ];
let candidate = "/api/resource/bar/zzz";
let best_match = patterns.iter()
           .filter(|p| p.is_match(candidate))
           .max();
assert_eq!(best_match.unwrap(), &UriPattern::from("/api/{foo}/{bar}/zzz"));

许可协议

该库根据 MIT 许可协议和 Apache 许可协议(版本 2.0)进行分发。

请参阅 LICENSE-APACHELICENSE-MIT

无运行时依赖