hyper_tree_router/
builder.rs

1use 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}