1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
use hyper::Method;
use crate::router::Handler;
pub struct App {
apps: Vec<Box<SubApp>>,
}
pub struct SubApp {
pub path: String,
pub method: Method,
pub handler: Box<dyn Handler>,
}
impl App {
pub fn new() -> Self {
Self {
apps: Vec::new(),
}
}
pub fn add(&mut self, path: &str, method: Method, handler: Box<dyn Handler>) {
let path = String::from(path);
let subapp = SubApp::new(path, method, handler);
self.apps.push(Box::new(subapp));
}
pub fn apps(self) -> Vec<Box<SubApp>> {
self.apps
}
}
impl SubApp {
pub fn new(path: String, method: Method, handler: Box<dyn Handler>) -> Self {
Self {
path,
method,
handler
}
}
pub fn path(self) -> String {
self.path
}
pub fn method(self) -> Method {
self.method
}
pub fn handler(self) -> Box<dyn Handler> {
self.handler
}
}