# attempt [![Crates.io](https://img.shields.io/crates/v/attempt.svg)](https://crates.io/crates/attempt) [![Documentation](https://docs.rs/attempt/badge.svg)](https://docs.rs/attempt/) A utility crate for retrying failable operations with various configuration options. ## Example ```rust use attempt::Attempt; fn fetch_data_from_unreliable_api() -> Result { // Fetch data from an API which randomly fails for no reason. // We've all dealt with one of these. } fn main() { let res: Result = 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 = Attempt::to(fetch_data_from_unreliable_api).run(); } async fn fetch_data_from_unreliable_api_async() -> Result { // Fetch data from an API which randomly fails for no reason, but do it async! } async fn async_attempt_example() -> Result { Attempt::to(fetch_data_from_unreliable_api_async) .delay(std::time::Duration::from_secs(1)) .max_tries(1000) .run_async() .await } ```