path-tree-0.1.7 has been yanked.
path-tree
Path-based routing tree.
A compressing dynamic trie (radix tree) structure is used for efficient matching.
Features
-
Fast!
-
Flexible!
-
Named parameters. e.g.
:name
. -
Catch-All parameters. e.g.
*any
. -
Supports multiple naming for the same path segment. e.g.
/users/:id
and/users/:user_id/repos
. -
Don't care about routes orders, we will automatically find them.
Usage
use PathTree;
let mut tree = new;
tree.insert;
tree.insert;
tree.insert;
tree.insert;
tree.insert;
tree.insert;
tree.insert;
tree.insert;
tree.insert;
tree.insert;
tree.insert;
tree.insert;
tree.insert;
// Matched "/"
let node = tree.find;
assert_eq!;
let res = node.unwrap;
assert_eq!;
assert_eq!; // Params
// Matched "/:username"
let node = tree.find;
assert_eq!;
let res = node.unwrap;
assert_eq!;
assert_eq!; // Params
// Matched "/*any"
let node = tree.find;
let res = node.unwrap;
assert_eq!;
assert_eq!;
// Matched "/users/:id"
let node = tree.find;
let res = node.unwrap;
assert_eq!;
assert_eq!; // Params
// Matched "/users/:user_id/repos/:id"
let node = tree.find;
let res = node.unwrap;
assert_eq!;
assert_eq!; // Params
// Matched "/users/:user_id/repos/:id/*any"
let node = tree.find;
let res = node.unwrap;
assert_eq!;
assert_eq!; // Params
// Matched "/users/repos/*any"
let node = tree.find;
let res = node.unwrap;
assert_eq!;
assert_eq!;
Examples
extern crate futures;
extern crate hyper;
extern crate path_tree;
use Future;
use Server;
use service_fn_ok;
use ;
use PathTree;
use Arc;
type Params<'a> = ;
type Handler = fn ;
Acknowledgements
It is inspired by the:
- rax
- httprouter
- echo router
- trekjs router
License
This project is licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)