#async #retry #retrying #delay #api #tries #failable

attempt

Attempt to do something over and over and over and over and

1 unstable release

0.1.0 Jun 22, 2022

#1586 in Asynchronous

MIT license

12KB
99 lines

attempt

Crates.io Documentation

A utility crate for retrying failable operations with various configuration options.

Example

use attempt::Attempt;

fn fetch_data_from_unreliable_api() -> Result<Data, Error> {
    // Fetch data from an API which randomly fails for no reason.
    // We've all dealt with one of these.
}

fn main() {
    let res: Result<Data, Error> =
        Attempt::to(fetch_data_from_unreliable_api)
            .delay(std::time::Duration::from_secs(1))
            .max_tries(1000)
            .run();

    // Be careful with this one.
    let res: Data =
        Attempt::infinitely(fetch_data_from_unreliable_api);

    // "Sensible" default of 10 max tries with an increasing delay between
    //  each attempt starting at 500ms.
    let res: Result<Data, Error> = Attempt::to(fetch_data_from_unreliable_api).run();
}

async fn fetch_data_from_unreliable_api_async() -> Result<Data, Error> {
    // Fetch data from an API which randomly fails for no reason, but do it async!
}

async fn async_attempt_example() -> Result<Data, Error> {
    Attempt::to(fetch_data_from_unreliable_api_async)
        .delay(std::time::Duration::from_secs(1))
        .max_tries(1000)
        .run_async()
        .await
}

Dependencies

~0–1.3MB
~22K SLoC