Expand description
§wayfind
A speedy, flexible router.
§Syntax
§Static
Static template parts match as-is.
- No percent-decoding occurs.
- Templates are case-sensitive.
The leading static part of a template must start with a /.
§Example
use wayfind::RouterBuilder;
let mut builder = RouterBuilder::new();
builder.insert("/hello", 1)?;
builder.insert("/hello/world", 2)?;
let router = builder.build();
let search = router.search("/hello").unwrap();
assert_eq!(search.data(), &1);
assert_eq!(search.template(), "/hello");
let search = router.search("/hello/world").unwrap();
assert_eq!(search.data(), &2);
assert_eq!(search.template(), "/hello/world");
assert!(router.search("/world").is_none());§Dynamic
Dynamic parameters can match any byte, excluding the path delimiter /.
Supported forms:
- whole segment parameters:
/<name>/ - inline parameters:
/<name>.txt
§Example
use wayfind::RouterBuilder;
let mut builder = RouterBuilder::new();
builder.insert("/users/<id>", 1)?;
builder.insert("/users/<id>/files/<filename>.pdf", 2)?;
let router = builder.build();
let search = router.search("/users/123").unwrap();
assert_eq!(search.data(), &1);
assert_eq!(search.template(), "/users/<id>");
assert_eq!(search.parameters(), &[("id", "123")]);
let search = router.search("/users/123/files/my.document.pdf").unwrap();
assert_eq!(search.data(), &2);
assert_eq!(search.template(), "/users/<id>/files/<filename>.pdf");
assert_eq!(search.parameters(), &[
("id", "123"),
("filename", "my.document")
]);§Wildcard
Wildcard parameters can match any byte, including the path delimiter
/.
Supported forms:
- inline wildcards:
/<*path>.html - mid-route wildcards:
/api/<*path>/help - end-route catch-all:
/<*catch_all>
§Example
use wayfind::RouterBuilder;
let mut builder = RouterBuilder::new();
builder.insert("/files/<*slug>/delete", 1)?;
builder.insert("/<*catch_all>", 2)?;
let router = builder.build();
let search = router
.search("/files/documents/reports/annual.pdf/delete")
.unwrap();
assert_eq!(search.data(), &1);
assert_eq!(search.template(), "/files/<*slug>/delete");
assert_eq!(search.parameters(), &[(
"slug",
"documents/reports/annual.pdf"
)]);
let search = router.search("/any/other/path").unwrap();
assert_eq!(search.data(), &2);
assert_eq!(search.template(), "/<*catch_all>");
assert_eq!(search.parameters(), &[("catch_all", "any/other/path")]);§Priority
When searching, each node tries its children in priority order:
- Static:
/users - Dynamic:
/<id> - Wildcard:
/<*path>
All parameters are greedy, consuming as much of the path as possible.
§Display
A Display implementation prints the router as a
tree.
Structs§
- Match
- Stores data from a successful router match.
- Router
- An immutable, optimized router.
- Router
Builder - A mutable builder for constructing a
Router.
Enums§
- Insert
Error - An error that occurred while inserting a template.