3 unstable releases
Uses new Rust 2024
| 0.2.0 | Mar 23, 2025 |
|---|---|
| 0.1.3 | Jul 2, 2024 |
| 0.1.0 | Jul 2, 2024 |
#1587 in Asynchronous
37 downloads per month
29KB
566 lines
retrier ♻️
A wasm-compatible retry library for futures
A goal of any operation should be a successful outcome. This crate gives operations a better chance at achieving that.
📦 install
In your Cargo.toml file, add the following under the [dependencies] heading
retrier = "0.1"
📝note
This is fork of the again library. This fork brings it up to date and adds to automation features which should make maintainance simpler.
🤸usage
For very simple cases you can use the module level retry function to retry a potentially fallible operation.
use std::error::Error;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
pretty_env_logger::init();
retrier::retry(|| reqwest::get("https://api.you.com")).await?;
Ok(())
}
You may not want to retry every kind of error. For preciseness you can be more explicit in which kinds of errors should be retried with the module level retry_if function.
use std::error::Error;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
pretty_env_logger::init();
retrier::retry_if(
|| reqwest::get("https://api.you.com")
reqwest::Error::is_status
).await?;
Ok(())
}
You can also customize retry behavior to suit your applications needs with a configurable and reusable RetryPolicy.
use std::error::Error;
use std::time::Duration;
use retrier::RetryPolicy;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
pretty_env_logger::init();
let policy = RetryPolicy::exponential(Duration::from_millis(200))
.with_max_retries(10)
.with_jitter(true);
policy.retry(|| reqwest::get("https://api.you.com")).await?;
Ok(())
}
See the docs for more examples.
Dependencies
~100–460KB