mettle
A resilience toolkit for Rust.
Composable, testable primitives for handling failure. Documentation.
Install
Blocking only, without an async runtime (no tokio):
Example
use retry;
use Duration;
// Retry with sensible defaults (exponential backoff, up to 3 retries),
// then override only what you need.
let body = retry
.when // skip permanent errors
.max_elapsed // give up after ~30s total
.await?;
No async runtime? The blocking twin is identical but ends in .call() instead of .await.
Tools
Each tool comes with a runnable example. Start there:
- retry: async examples/retry.rs · blocking examples/blocking_retry.rs
Retries emit tracing events out of the box (target mettle::retry). Install any subscriber
(e.g. tracing_subscriber::fmt::init()) to see them.
Status
v0.x, with async (Tokio) and blocking APIs. Expect breaking changes before 1.0.
License
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.