grout 0.2.0

A dead simple hash-based HTTP router built on hyper.
Documentation
  • Coverage
  • 60%
    12 out of 20 items documented4 out of 9 items with examples
  • Size
  • Source code size: 29.49 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 6.35 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 1m 20s Average build duration of successful builds.
  • all releases: 1m 20s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • appellation/grout
    3 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • appellation

grout

A dead simple hash-based HTTP router built on hyper.

use grout::{path, Body, Method, Request, Response, ResponseBuilder, RouterBuilder, Server};

async fn handler(params: Vec<String>, _req: Request) -> Response {
	Ok(ResponseBuilder::default().body(Body::empty())?)
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
	let addr = ([127, 0, 0, 1], 3000).into();
	let router = RouterBuilder::default()
		.register(Method::GET, path![], handler)
		.register(Method::GET, path![foo / _], handler)
		.register(Method::POST, path![foo / _], handler)
		.build();

	let server = Server::bind(&addr).serve(router);
	println!("Listening on http://{}", addr);

	server.await?;
	Ok(())
}

Features

  • HTTP method routing
  • Route parameters (ordered, not keyed)
  • Simple API

See the examples folder for example usage.

Limitations

  • No state passing or any form of middleware
    • I recommend the state crate to inject outside structs into your route handlers
  • No complex route matching
    • Perform complex validation in your route handlers