forked from nickel-org/nickel.rs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.rs
64 lines (54 loc) · 1.78 KB
/
server.rs
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
use std::io::net::ip::{SocketAddr, IpAddr, Port};
use http;
use http::server::request::{AbsolutePath};
use http::server::{Config, Server, Request, ResponseWriter};
use http::status::Ok;
use router::Router;
use middleware::MiddlewareStack;
use request;
use response;
#[deriving(Clone)]
pub struct Server {
router: Router,
middleware_stack: MiddlewareStack,
ip: IpAddr,
port: Port
}
impl http::server::Server for Server {
fn get_config(&self) -> Config {
Config { bind_address: SocketAddr { ip: self.ip, port: self.port } }
}
fn handle_request(&self, req: Request, res: &mut ResponseWriter) {
let nickel_req = &mut request::Request::from_internal(&req);
let nickel_res = &mut response::Response::from_internal(res);
self.middleware_stack.invoke(nickel_req, nickel_res);
match &req.request_uri {
&AbsolutePath(ref url) => {
match self.router.match_route(req.method.clone(), url.clone()) {
Some(route_result) => {
nickel_res.origin.status = Ok;
nickel_req.params = route_result.params.clone();
(route_result.route.handler)(nickel_req, nickel_res);
},
None => {}
}
},
// TODO: Return 404
_ => {}
}
}
}
impl Server {
pub fn new(router: Router, middleware_stack: MiddlewareStack, ip: IpAddr, port: Port) -> Server {
Server {
router: router,
middleware_stack: middleware_stack,
ip: ip,
port: port
}
}
// why do we need this? Is the http::Server.serve_forever method protected in C# terms?
pub fn serve (self) {
self.serve_forever();
}
}