treemux 0.8.5

A high performance HTTP request router that scales well.
Documentation
use std::{convert::Infallible, sync::Arc};

use hyper::{
  service::{make_service_fn, service_fn},
  Body, Request, Server,
};

use treemux::Treemux;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
  let router = Treemux::builder();

  let router: Arc<Treemux> = Arc::new(router.into());

  let make_svc = make_service_fn(move |_| {
    let router = router.clone();
    async move {
      Ok::<_, Infallible>(service_fn(move |req: Request<Body>| {
        let router = router.clone();
        async move {
          let svc = router.clone();
          svc.serve(req).await
        }
      }))
    }
  });

  let _server = Server::bind(&([127, 0, 0, 1], 3000).into()).serve(make_svc).await?;
  Ok(())
}