Sans-IO first
Actions build plain http::Request values. Send them with reqwest, ureq, hyper, tests, WASM, or whatever you already run.
Work in progress. We're focused on lta-rs-style clients right now: ergonomics that feel good in real code, validation that matches the spec. Other OpenAPI shapes come next, once we nail down what's supported and have tests to prove it.
Satay turns a spec into request builders, response decoders, and validation newtypes. You send the
http::Request with reqwest, ureq, hyper, or whatever you already run.
Quick start
cargo install satay-cli
Features
One codegen output. Plug in reqwest, ureq, hyper, or your own client without keeping separate async, blocking, and WASM backends in sync (Haha get it? Nvm).
Actions build plain http::Request values. Send them with reqwest, ureq, hyper, tests, WASM, or whatever you already run.
String, number, integer, and array constraints from the spec become nutype newtypes. Bounds narrow to u8 when the maximum allows it.
Reads the spec into a normalized IR, then emits structs, enums, builders, and decoders as ordinary Rust you can edit.
Stay IO-free, or pull in satay-reqwest and satay-ureq when you want a short send_with call site.
Built with Satay
Open-source API clients built with Satay. Got one? Send a PR.
A type-safe, sans-IO Rust client for Singapore NEA real-time weather & environmental APIs.
Fork the repo, add a row to
website/src/data/users.ts
with your name, description, and links. Logo goes in
public/users/
if you have one; set logo in the entry.
How it works
http::Request values. $ satay generate --input openapi.yaml --output src/generated --rustfmt
$ satay --help