#template #uri #url #rfc6570 #uritemplates

uritemplate-next

Rust implementation of RFC6570 - URI Template that can processURI Templates up and to including ones designated Level 4

1 unstable release

0.2.0 Nov 21, 2020

#248 in Template engine

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 downloads per month
Used in 40 crates (4 directly)

BSD-3-Clause

32KB
551 lines

rust-uritemplate

Build Status Cargo version License

Documentation

rust-uritemplate is a Rust implementation of RFC6570 - URI Template that can process URI Templates up to and including ones designated as Level 4 by the specification. It passes all of the tests in the uritemplate-test test suite.

Basic Usage

Variable setting can be chained for nice, clean code.

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

It is not possible to set a variable to the value "undefined". Instead, simply delete the variable if you have already set it.

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

The delete function returns true if the variable existed and false otherwise.

Supported Types

Any type that implements IntoTemplateVar can be set as the value of a UriTemplate variable. The following implementations are provided by default for each type of variable:

  • Scalar Values: String, &str
  • Lists: Vec<String>, &[String], &[str]
  • Associative Arrays: Vec<(String, String)>, &[(String, String)], &[(&str, &str)], &HashMap<String, String>

In addition, you can implement IntoTemplateVar for your own types. View the documentation for IntoTemplateVar for information on how that works.

Dependencies

~2.1–3MB
~53K SLoC