Parameters Syntax
Pattern | Kind | Description |
---|---|---|
:name |
Normal |
Matches a path piece, excludes / |
:name? |
Optional |
Matches an optional path piece, excludes / |
/:name?/ /:name? |
OptionalSegment |
Matches an optional path segment, excludes / , prefix or suffix should be / |
+ :name+ |
OneOrMore |
Matches a path piece, includes / |
* :name* |
ZeroOrMore |
Matches an optional path piece, includes / |
/*/ /* /:name*/ /:name* |
ZeroOrMoreSegment |
Matches zero or more path segments, prefix or suffix should be / |
Supports
Case | Parameters |
---|---|
:a:b |
a b |
:a:b? |
a b |
:a-:b :a.:b :a~:b |
a b |
:a_a-:b_b |
a_a b_b |
:a\\: :a\\_ |
a |
:a\\::b :a\\_:b |
a b |
:a* |
a |
* |
*1 |
*.* |
*1 *2 |
:a+ |
a |
+ |
+1 |
+.+ |
+1 +2 |
/*/abc/+/def/g |
*1 +2 |
Examples
use PathTree;
/*
/ •0
├── api/
│ └── + •13
├── login •1
├── public/
│ └── ** •7
├── s
│ ├── ettings •3
│ │ └── /
│ │ └── : •4
│ └── ignup •2
└── : •5
└── /
└── : •6
└── /
├── actions/
│ └── :
│ └── \:
│ └── : •10
├── releases/download/
│ └── :
│ └── /
│ └── :
│ └── .
│ └── : •8
├── tags/
│ └── :
│ └── -
│ └── :
│ └── -
│ └── : •9
├── : •11
└── ** •12
*/
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;
tree.insert;
let = tree.find.unwrap;
assert_eq!;
assert_eq!;
let = tree.find.unwrap;
assert_eq!;
assert_eq!;
let = tree.find.unwrap;
assert_eq!;
assert_eq!;
let = tree.find.unwrap;
assert_eq!;
assert_eq!;
let = tree.find.unwrap;
assert_eq!;
assert_eq!;
let = tree.find.unwrap;
assert_eq!;
assert_eq!;
let = tree.find.unwrap;
assert_eq!;
assert_eq!;
let = tree.find.unwrap;
assert_eq!;
assert_eq!;
let = tree.find.unwrap;
assert_eq!;
assert_eq!;
let = tree.find.unwrap;
assert_eq!;
assert_eq!;
let = tree.find.unwrap;
assert_eq!;
assert_eq!;
let = tree.find.unwrap;
assert_eq!;
assert_eq!;
Hyper hello example can be found here.
Benchmark
$ cargo bench
Acknowledgements
It is inspired by the:
- rax
- httprouter
- echo router
- path-to-regexp
- gofiber router
- trekjs router
Other languages
Wrappers for path-tree in other languages: