Routerify

A lightweight router implementation with middleware support for the rust HTTP library hyper.

Usage

Add this to your Cargo.toml:

toml [dependencies] routerify = "0.1"

Examples

```rust use hyper::service::{makeservicefn, servicefn}; use hyper::{Body, Request, Response, Server}; use lazystatic::lazy_static; use routerify::{Middleware, Router}; use std::convert::Infallible; use std::net::SocketAddr;

lazystatic! { static ref APIROUTER: Router = Router::builder() .middleware(Middleware::pre(middlewarelogger)) .get("/users/:username/view", handleapi_users) .build() .unwrap(); }

lazystatic! { static ref ROUTER: Router = Router::builder() .middleware(Middleware::pre(middlewarelogger)) .get("/", handlehome) .router("/api", &*APIROUTER) .build() .unwrap(); }

async fn handleapiusers(_req: Request) -> routerify::Result> { Ok(Response::new(Body::from("Fetch an user data"))) }

async fn middleware_logger(req: Request) -> routerify::Result> { println!("Visited: {} {}", req.method(), req.uri()); Ok(req) }

async fn handlehome(req: Request) -> routerify::Result> { Ok(Response::new(Body::from("Hello Home"))) }

[tokio::main]

async fn main() { let reqservice = makeservicefn(|conn| async { Ok::<_, Infallible>(servicefn(|req: Request| async { Ok::, Infallible>(routerify::handlerequest(&*ROUTER, req).await) })) });

let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); let server = Server::bind(&addr) .serve(req_service);

println!("App is serving on: {}", server.local_addr()); if let Err(e) = server.await { eprintln!("Server Error: {}", e); } } ```