1use crate::Router;
4use hyper::server::Server;
5use hyper::service::{make_service_fn, service_fn};
6use std::net::SocketAddr;
7use std::sync::Arc;
8
9impl Router {
10 pub async fn run(self, host: &str, port: u16) {
12 let addr: SocketAddr = format!("{}:{}", host, port).parse().expect("invalid socket address: invalid IP address syntax");
13
14 let router = Arc::new(self);
15
16 let make_svc = make_service_fn(move |_conn| {
17 let router = router.clone();
18 async move {
19 Ok::<_, hyper::Error>(service_fn(move |req| {
20 let router = router.clone();
21 async move { Ok::<_, hyper::Error>(router.handle_request(req).await) }
22 }))
23 }
24 });
25
26 let server = Server::bind(&addr).serve(make_svc);
27
28 println!("Nimble server running on http://{}", addr);
29 println!("Press Ctrl+C to stop");
30
31 if let Err(e) = server.await {
32 eprintln!("Server error: {}", e);
33 }
34 }
35}