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
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-APACHE 和 LICENSE-MIT。