Expand description

backon intends to provide an opposite backoff implementation of the popular backoff.

  • Newer: developed by Rust edition 2021 and latest stable.
  • Cleaner: Iterator based abstraction, easy to use, customization friendly.
  • Easier: Trait based implementations, works like a native function provided by closures.

Backoff

Any types that implements Iterator<Item = Duration> can be used as backoff.

backon also provides backoff implementations with reasonable defaults:

Examples

use backon::Retryable;
use backon::ExponentialBackoff;
use anyhow::Result;

async fn fetch() -> Result<String> {
    Ok(reqwest::get("https://www.rust-lang.org").await?.text().await?)
}

#[tokio::main]
async fn main() -> Result<()> {
    let content = fetch.retry(ExponentialBackoff::default()).await?;
    println!("fetch succeeded: {}", content);

    Ok(())
}

Structs

ConstantBackoff provides backoff with constant delay and limited times.

Exponential backoff implementation.

Traits

Backoff is an Iterator that returns Duration.

Retryable will add retry support for functions that produces a futures with results.