httpz

Code once, support every Rust webserver!

Discord Crates.io License

This project is a 🚧 work in progress 🚧. Currently it is designed around the goals of [rspc](https://rspc.otbeaumont.me) but feel free to reach to me if you want to collaborate on using it in your own project. ## Usage ```rust // Define your a single HTTP handler which is supported by all major Rust webservers. let endpoint = GenericEndpoint::new( // Set URL prefix "/", // Set the supported HTTP methods [Method::GET, Method::POST], // Define the handler function |_req: Request| async move { Ok(Response::builder() .status(StatusCode::OK) .header("Content-Type", "text/html") .body(b"Hello httpz World!".to_vec())?) }, ); // Attach your generic endpoint to Axum let app = axum::Router::new().route("/", endpoint.axum()); // Attach your generic endpoint to Actix Web HttpServer::new({ let endpoint = endpoint.actix(); move || App::new().service(web::scope("/prefix").service(endpoint.mount())) }); // and so on... ``` Check out the rest of the [examples](/examples)! ## Features - Write your HTTP handler once and support [Axum](https://github.com/tokio-rs/axum), [Actix Web](https://actix.rs/), [Poem](https://github.com/poem-web/poem), [Rocket](https://rocket.rs), [Warp](https://github.com/seanmonstar/warp) and more. - Support for websockets on compatible webservers. ## Projects using httpz httpz is primarily designed to make life easier for library authors. It allows a library author to write and test a HTTP endpoint once and know it will work for all major Rust HTTP servers. Libraries using httpz: - [rspc](https://github.com/oscartbeaumont/rspc) If you are interested in using httpz and have questions jump in [the Discord](https://discord.gg/4V9M5sksw8)!