Crates.io | attempt |
lib.rs | attempt |
version | 0.1.0 |
source | src |
created_at | 2022-06-22 21:03:02.52527 |
updated_at | 2022-06-22 21:03:02.52527 |
description | Attempt to do something over and over and over and over and... |
homepage | |
repository | https://github.com/TylerLafayette/attempt |
max_upload_size | |
id | 611147 |
size | 12,281 |
A utility crate for retrying failable operations with various configuration options.
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
}