extern crate std_logger;
#[macro_use]
extern crate log;
use std_logger::REQUEST_TARGET;
fn main() {
std_logger::init();
logger_middleware(Request { url: "/".to_owned(), method: "GET".to_owned() });
logger_middleware(Request { url: "/not_found".to_owned(), method: "GET".to_owned() });
}
struct Request {
url: String,
method: String,
}
struct Response {
status_code: u16,
body: String,
}
fn logger_middleware(request: Request) -> Response {
let url = request.url.clone();
let method = request.url.clone();
let response = http_handler(request);
info!(target: REQUEST_TARGET, "url = `{}`, method = `{}`, status_code = {}, body_size = {}",
url, method, response.status_code, response.body.len());
if response.status_code == 404 {
error!("oh no we've routed the user to an unknown page");
}
response
}
fn http_handler(request: Request) -> Response {
match (request.method.as_str(), request.url.as_str()) {
("GET", "/") => Response {
status_code: 200,
body: "Home page".to_owned(),
},
_ => Response {
status_code: 404,
body: "Not found".to_owned(),
},
}
}