Crates.io | retrier |
lib.rs | retrier |
version | 0.1.3 |
source | src |
created_at | 2024-07-02 08:33:01.122329 |
updated_at | 2024-07-02 08:37:36.922325 |
description | A wasm-compatible retry library for futures |
homepage | https://github.com/ifiokjr/retrier |
repository | https://github.com/ifiokjr/retrier |
max_upload_size | |
id | 1289362 |
size | 76,611 |
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.
In your Cargo.toml file, add the following under the [dependencies]
heading
retrier = "0.1"
This is fork of the again
library. This fork brings it up to date and adds to automation features which should make maintainance simpler.
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.