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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
use hyper::{self, Method};
use hyper::server::{self, Request, Response, Service};
use std::collections::HashMap;
use LuminalFuture;
use error::*;
use super::Router;
pub struct ServiceRouteBuilder {
pub router: Router,
}
impl ServiceRouteBuilder {
pub fn new() -> ServiceRouteBuilder {
ServiceRouteBuilder {
router: Router {
routes: HashMap::new(),
},
}
}
pub fn get<
S: Service<
Request = Request,
Response = Response,
Error = hyper::Error,
Future = LuminalFuture,
>
+ 'static,
>(
mut self,
route: &str,
service: S,
) -> Result<Self> {
{
self.router.add(Method::Get, route, Box::new(service))?;
}
Ok(self)
}
pub fn post<
S: Service<
Request = Request,
Response = Response,
Error = hyper::Error,
Future = LuminalFuture,
>
+ 'static,
>(
mut self,
route: &str,
service: S,
) -> Result<Self> {
{
self.router.add(Method::Post, route, Box::new(service))?;
}
Ok(self)
}
pub fn fn_builder(self) -> FnRouteBuilder {
FnRouteBuilder {
router: self.router,
}
}
pub fn build(self) -> Router {
self.router
}
}
pub struct FnRouteBuilder {
pub router: Router,
}
impl FnRouteBuilder {
pub fn new() -> FnRouteBuilder {
FnRouteBuilder {
router: Router {
routes: HashMap::new(),
},
}
}
pub fn get<F: Fn(Request) -> LuminalFuture + 'static>(
mut self,
route: &str,
function: F,
) -> Result<Self> {
{
self.router
.add(Method::Get, route, Box::new(server::service_fn(function)))?;
}
Ok(self)
}
pub fn service_builder(self) -> ServiceRouteBuilder {
ServiceRouteBuilder {
router: self.router,
}
}
pub fn build(self) -> Router {
self.router
}
}