keelrun 0.4.0

Keel as a Rust front end: #[keel::wrap] plus a reqwest-middleware adapter, routing calls through the keel-core Engine chain (cache/rate/breaker/timeout/retry) from one `keel.toml`. No import hook (Rust has none to hang off of) — call `keel::init()` once from your own `main`. Published as `keelrun` (plain `keel` is taken on crates.io); add it as `cargo add keelrun --rename keel` so `#[keel::wrap]` resolves — see README.md.
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// A valid `#[keel::wrap]` usage: free async fn, explicit target, `Result<T, E>`
// return with `T: Serialize + DeserializeOwned`, `E: std::error::Error`.

#[derive(Debug, serde::Serialize, serde::Deserialize)]
struct Order {
    id: u32,
}

#[derive(Debug, thiserror::Error)]
#[error("upstream failed")]
struct UpstreamError;

#[keel::wrap(target = "orders-api", idempotent = true)]
async fn fetch_order(id: u32) -> Result<Order, UpstreamError> {
    Ok(Order { id })
}

fn main() {}