use fire_http as fire; use fire::header::{RequestHeader, ResponseHeader, StatusCode}; use fire::resources::Resources; use fire::routes::Catcher; use fire::util::PinnedFuture; use fire::{get, Request, Response, Result}; #[get("/")] fn hello_world() -> &'static str { "Hello, World!" } struct Error404Handler; impl Catcher for Error404Handler { fn check(&self, _req: &RequestHeader, res: &ResponseHeader) -> bool { res.status_code() == &StatusCode::NOT_FOUND } fn call<'a>( &'a self, req: &'a mut Request, resp: &'a mut Response, _data: &'a Resources, ) -> PinnedFuture<'a, Result<()>> { PinnedFuture::new(async move { let path = req.header().uri().path(); let method = req.header().method(); resp.body = format!( "Error 404: Page \"{}\" With Method \"{}\" Not Found", path, method ) .into(); Ok(()) }) } } #[tokio::main] async fn main() { let mut server = fire::build("0.0.0.0:3000") .await .expect("Address could not be parsed"); server.add_route(hello_world); server.add_catcher(Error404Handler); server.ignite().await.unwrap(); }