arti/crates/retry-error
Ian Jackson 589c6e52bb Run maint/add_warning crates/*/src/{lib,main}.rs
Update all lint blocks
2022-06-23 19:15:42 +01:00
..
src Run maint/add_warning crates/*/src/{lib,main}.rs 2022-06-23 19:15:42 +01:00
Cargo.toml Bump the version of every* crate to 0.3.0 2022-05-06 10:03:15 -04:00
README.md Fix sentences 2022-04-27 13:53:23 +01:00

README.md

retry-error

An error attempt to represent multiple failures.

This crate implements [RetryError], a type to use when you retry something a few times, and all those attempts can fail differently each time. Instead of returning only a single error, it records all of the errors received, in case they are different.

This crate is developed as part of Arti, a project to implement Tor in Rust. It's used by higher-level crates that retry operations.

Example

use retry_error::RetryError;

fn some_operation() -> anyhow::Result<bool> {
   unimplemented!(); // example
}

fn example() -> Result<(), RetryError<anyhow::Error>> {
   const N_ATTEMPTS: usize = 10;
   let mut err = RetryError::in_attempt_to("perform an example operation");
   for _ in 0..N_ATTEMPTS {
       match some_operation() {
           Ok(val) => return Ok(()),
           Err(e) => err.push(e),
       }
   }
   // All attempts failed; return all the errors.
   return Err(err);
}

License: MIT OR Apache-2.0