6个版本
0.1.5 | 2023年8月24日 |
---|---|
0.1.4 | 2023年8月24日 |
#170 in 模板引擎
每月39次下载
63KB
1.5K SLoC
uri-template-system
URI模板(RFC6570)是Web编程中一个被低估的工具。它规范了URI和相关表单的构建,消除了对临时字符串操作的需求,并有助于在复杂的Web应用程序中提供一致性。
use uri_template_system_core::{ Template, Value, Values };
let template = Template::parse("/hello/{name}/from{/library*}").unwrap();
let values = Values::default()
.add("name", Value::item("world"))
.add("library", Value::list(["uri", "template", "system"]));
assert_eq!(
template.expand(&values).unwrap(),
"/hello/world/from/uri/template/system"
);
超出RFC本身的范围,它们也可以(经过一些判断)用于匹配URI和相关表单,实际上为从相同数据驱动的链接机制提供了基础,从而实现路由机制。不再有链接和路由之间的不匹配。
范围
此库提供了一个符合RFC并通过了解析和扩展标准测试用例的URI模板实现。
未来的迭代将扩展此功能,提供对单个和多个URI模板的匹配,基于URI模板匹配的路由,以及对强类型模板数据的支持。请参阅里程碑以获取最新进展和更多计划功能的详细描述。
目标
现有的URI模板实现存在于Rust中,特别是rust-uritemplate
和该实现的各个分支,以及iri-string
库中的实现。
本实现旨在既更加“正确”(解析器在遵守RFC方面故意比较严格,而现有实现允许一些格式错误的模板通过为有效)又在底层表示方面更加结构化(旨在使匹配等附加功能更易于处理)。性能同样重要,且该实现大致与iri-string
(rust-uritemplate
的派生具有不同的编程模型,但即便考虑到这一点,它们通常要慢得多)相当,或者略快。
基准和RFC合规性测试(以及测试工具)可以在tests
目录中找到——和往常一样,基准是具有指示性的,但在实际条件下的性能总是会变化。
依赖项
约280–740KB
约17K SLoC