#template #uri #url #rfc6570 #uritemplates

uritemplate-next

Rust实现RFC6570 - URI模板,可以处理URI模板,包括指定为第4级的模板

1 个不稳定版本

0.2.0 2020年11月21日

#248模板引擎

Download history 56727/week @ 2024-03-26 74607/week @ 2024-04-02 68585/week @ 2024-04-09 77821/week @ 2024-04-16 80809/week @ 2024-04-23 78169/week @ 2024-04-30 80405/week @ 2024-05-07 77796/week @ 2024-05-14 81150/week @ 2024-05-21 97547/week @ 2024-05-28 101045/week @ 2024-06-04 100494/week @ 2024-06-11 83518/week @ 2024-06-18 94607/week @ 2024-06-25 92014/week @ 2024-07-02 85067/week @ 2024-07-09

371,930 每月下载量
用于 40 个crates(直接使用4个)

BSD-3-Clause

32KB
551

rust-uritemplate

Build Status Cargo version License

文档

rust-uritemplateRFC6570 - URI模板 的Rust实现,可以处理URI模板,包括指定为第4级的模板。它通过了 uritemplate-test 测试套件中的所有测试。

基本用法

变量设置可以链式调用,以生成整洁的代码。

let uri = UriTemplate::new("/view/{object:1}/{/object,names}{?query*}")
    .set("object", "lakes")
    .set("names", &["Erie", "Superior", "Ontario"])
    .set("query", &[("size", "15"), ("lang", "en")])
    .build();

assert_eq!(uri, "/view/l/lakes/Erie,Superior,Ontario?size=15&lang=en");

无法将变量设置为“未定义”的值。相反,如果已经设置了变量,只需删除它。

let mut t = UriTemplate::new("{hello}");
t.set("hello", "Hello World!");
assert_eq!(t.build(), "Hello%20World%21");

t.delete("hello");
assert_eq!(t.build(), "");

delete 函数在变量存在时返回 true,否则返回 false

支持类型

任何实现 IntoTemplateVar 的类型都可以作为 UriTemplate 变量的值。默认情况下为每种变量类型提供以下实现:

  • 标量值:String&str
  • 列表:Vec<String>&[String]&[str]
  • 关联数组:Vec<(String, String)>&[(String, String)]&[(&str, &str)]&HashMap<String, String>

此外,您可以为您的类型实现 IntoTemplateVar。查看 IntoTemplateVar 的文档以了解其工作方式。

依赖项

~2.1–3MB
~53K SLoC