#backoff #exponential #futures

deprecated backoff-futures

A retry and backoff mechanism for std::future::Future. DEPRECATED: see backoff::future

6 releases

0.3.2 Jul 14, 2020
0.3.1 Jul 14, 2020
0.3.0 Jun 12, 2020
0.2.0 Nov 27, 2019
0.1.1 Aug 15, 2019

#5 in #exponential

Download history 11/week @ 2023-05-25 18/week @ 2023-06-01 5/week @ 2023-06-08 22/week @ 2023-06-15 23/week @ 2023-06-22 7/week @ 2023-06-29 10/week @ 2023-07-06 9/week @ 2023-07-13 10/week @ 2023-07-20 17/week @ 2023-07-27 10/week @ 2023-08-03 12/week @ 2023-08-10 19/week @ 2023-08-17 13/week @ 2023-08-24 12/week @ 2023-08-31 20/week @ 2023-09-07

65 downloads per month
Used in tokkit

MIT license

13KB
158 lines

backoff-futures

Build status crates.io docs.rs License: MIT

A retry and backoff mechanism for std::future::Future.

Documentation

Adding as a dependency

Manually

[dependencies]
backoff-futures = "0.1"

With cargo-edit

cargo add backoff-futures

Usage

#![feature(async_await)]

fn isahc_error_to_backoff(err: isahc::Error) -> backoff::Error<isahc::Error> {
    match err {
        isahc::Error::Aborted | isahc::Error::Io(_) | isahc::Error::Timeout =>
            backoff::Error::Transient(err),
        _ =>
            backoff::Error::Permanent(err)
    }
}

async fn get_example_contents() -> Result<String, backoff::Error<isahc::Error>> {
    use isahc::ResponseExt;

    let mut response = isahc::get_async("https://example.org")
        .await
        .map_err(isahc_error_to_backoff)?;

    response
        .text_async()
        .await
        .map_err(|err: std::io::Error| backoff::Error::Transient(isahc::Error::Io(err)))
}

async fn get_example_contents_with_retry() -> Result<String, isahc::Error> {
    use backoff_futures::BackoffExt;

    let mut backoff = backoff::ExponentialBackoff::default();
    get_example_contents.with_backoff(&mut backoff)
        .await
        .map_err(|err| match err {
            backoff::Error::Transient(err) | backoff::Error::Permanent(err) => err
        })
}

License

MIT

Dependencies

~4.5MB
~73K SLoC