#uri #template #rfc6570 #url #uritemplates

数据

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

2 个版本

0.1.1 2024 年 3 月 1 日
0.1.0 2022 年 9 月 14 日

#67模板引擎

每月下载 36
用于 4 Crates(2 个直接使用)

BSD-3-Clause

33KB
543

数据

Build Status Cargo version Documentation dependency status License codecov

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

它是 rust-uritemplate 的分支。

基本用法

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

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");

无法将变量设置为 "undefined" 的值。相反,如果已经设置了变量,只需删除该变量即可。

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的文档以了解其工作方式。

致谢

本软件是在H2020项目SIFIS-Home的范围内开发的,项目编号为n. 952652。

依赖项

~2.2–3MB
~53K SLoC