|
3 | 3 | use std::net::ToSocketAddrs; |
4 | 4 | use std::sync::Arc; |
5 | 5 | use std::time::Duration; |
| 6 | +use std::convert::Infallible; |
| 7 | +use std::error::Error; |
6 | 8 |
|
7 | | -use iron::Iron; |
| 9 | +// use iron::Iron; |
8 | 10 | use log::debug; |
9 | 11 | use redis::{ConnectionInfo, IntoConnectionInfo}; |
10 | | -use router::Router; |
| 12 | +use hyper::{Body, Request, Response, Server}; |
| 13 | +use routerify::{Router, RouterService}; |
11 | 14 |
|
12 | 15 | use serde_json::map::Map; |
13 | 16 | use serde_json::Value; |
@@ -171,41 +174,43 @@ pub struct SpaceapiServer { |
171 | 174 |
|
172 | 175 | impl SpaceapiServer { |
173 | 176 | /// Create and return a Router instance. |
174 | | - fn route(self) -> Router { |
175 | | - let mut router = Router::new(); |
176 | | - |
177 | | - router.get( |
178 | | - "/", |
179 | | - handlers::ReadHandler::new( |
180 | | - self.status.clone(), |
181 | | - self.redis_pool.clone(), |
182 | | - self.sensor_specs.clone(), |
183 | | - self.status_modifiers, |
184 | | - ), |
185 | | - "root", |
186 | | - ); |
187 | | - |
188 | | - router.put( |
| 177 | + fn route(self) -> Router<Body, Infallible> { |
| 178 | + Router::builder() |
| 179 | + /* |
| 180 | + .get( "/", handlers::ReadHandler::new( |
| 181 | + self.status.clone(), |
| 182 | + self.redis_pool.clone(), |
| 183 | + self.sensor_specs.clone(), |
| 184 | + self.status_modifiers, |
| 185 | + ) |
| 186 | + ) |
| 187 | + */ |
| 188 | + .build() |
| 189 | + .unwrap() |
| 190 | + /* |
| 191 | + .put( |
189 | 192 | "/sensors/:sensor/", |
190 | 193 | handlers::UpdateHandler::new(self.redis_pool.clone(), self.sensor_specs), |
191 | 194 | "sensors", |
192 | | - ); |
193 | | - |
194 | | - router |
| 195 | + ) |
| 196 | + */ |
195 | 197 | } |
196 | 198 |
|
197 | 199 | /// Start a HTTP server listening on ``self.host:self.port``. |
198 | 200 | /// |
199 | 201 | /// The call returns an `HttpResult<Listening>` object, see |
200 | 202 | /// http://ironframework.io/doc/hyper/server/struct.Listening.html |
201 | 203 | /// for more information. |
202 | | - pub fn serve<S: ToSocketAddrs>(self, socket_addr: S) -> crate::HttpResult<crate::Listening> { |
| 204 | + pub async fn serve<S: ToSocketAddrs>(self, socket_addr: S) -> Result<(), Box<dyn Error>> { |
203 | 205 | // Launch server process |
204 | 206 | let router = self.route(); |
205 | 207 | println!("Starting HTTP server on:"); |
206 | 208 | for a in socket_addr.to_socket_addrs()? { |
207 | 209 | println!("\thttp://{}", a); |
208 | 210 | } |
209 | | - Iron::new(router).http(socket_addr) |
| 211 | + let service = RouterService::new(router).unwrap(); |
| 212 | + |
| 213 | + let server = Server::bind(&socket_addr.to_socket_addrs().unwrap().next().unwrap()).serve(service); |
| 214 | + Ok(server.await?) |
210 | 215 | } |
211 | 216 | } |
0 commit comments