hyper_tree_router/
builder.rs1use super::{route::Route, router::Router};
2use prefix_tree_map::{KeyPart, PrefixTreeMapBuilder};
3
4pub struct RouterBuilder {
5 routes: PrefixTreeMapBuilder<String, String, Route>,
6}
7
8impl RouterBuilder {
9 pub fn new() -> Self {
10 RouterBuilder {
11 routes: PrefixTreeMapBuilder::<String, String, Route>::new(),
12 }
13 }
14
15 pub fn route(mut self, route: Route) -> Self {
16 self.routes
17 .insert(RouterBuilder::build_path(route.path.clone()), route);
18 self
19 }
20
21 fn build_path(path: String) -> Vec<KeyPart<String, String>> {
22 path.split('/')
23 .map(|part| {
24 if part.starts_with(':') {
25 KeyPart::Wildcard(part.to_string())
26 } else {
27 KeyPart::Exact(part.to_string())
28 }
29 })
30 .collect()
31 }
32
33 pub fn build(self) -> Router {
34 Router::new(self.routes.build())
35 }
36}
37impl Default for RouterBuilder {
38 fn default() -> Self {
39 Self::new()
40 }
41}