add iron
This commit is contained in:
11
iron/Cargo.toml
Normal file
11
iron/Cargo.toml
Normal file
@@ -0,0 +1,11 @@
|
||||
[package]
|
||||
name = "iron"
|
||||
version = "0.1.0"
|
||||
authors = ["Hatter Jiang <jht5945@gmail.com>"]
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
iron = "0.6.1"
|
||||
time = "0.2.6"
|
||||
38
iron/src/main.rs
Normal file
38
iron/src/main.rs
Normal file
@@ -0,0 +1,38 @@
|
||||
use iron::prelude::*;
|
||||
use iron::{BeforeMiddleware, AfterMiddleware, typemap};
|
||||
use std::time::SystemTime;
|
||||
|
||||
struct ResponseTime;
|
||||
|
||||
impl typemap::Key for ResponseTime { type Value = u128; }
|
||||
|
||||
impl BeforeMiddleware for ResponseTime {
|
||||
fn before(&self, req: &mut Request) -> IronResult<()> {
|
||||
req.extensions.insert::<ResponseTime>(get_time_in_nanos());
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl AfterMiddleware for ResponseTime {
|
||||
fn after(&self, req: &mut Request, res: Response) -> IronResult<Response> {
|
||||
let delta = get_time_in_nanos() - *req.extensions.get::<ResponseTime>().unwrap();
|
||||
println!("Request: {}, took: {} ms", req.url, (delta as f64) / 1000000.0);
|
||||
Ok(res)
|
||||
}
|
||||
}
|
||||
|
||||
fn get_time_in_nanos() -> u128 {
|
||||
SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_nanos()
|
||||
}
|
||||
|
||||
fn hello_world(_: &mut Request) -> IronResult<Response> {
|
||||
Ok(Response::with((iron::status::Ok, "Hello World\n")))
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let mut chain = Chain::new(hello_world);
|
||||
chain.link_before(ResponseTime);
|
||||
chain.link_after(ResponseTime);
|
||||
println!("Listen on: 127.0.0.1:8080");
|
||||
Iron::new(chain).http("127.0.0.1:8080").unwrap();
|
||||
}
|
||||
Reference in New Issue
Block a user