arti/crates/retry-error
Nick Mathewson aae242af22 Bump caret, retry-error to 0.1.1
Unlike the rest of the crates, these don't have a "tor-" or "arti-"
prefix, and are potentially used by code outside arti.  With that in
mind, it's probably for the best not to bump them to 0.2.0 along
with the rest of our crates.

They have had no changes since 0.1.0 other than refactoring and
changing of clippy lints.  Therefore, I'm not bumping the
dependencies from other crates onto these: it's fine whether our
other crates use caret/retry-error 0.1.0 or 0.1.1.
2022-04-01 09:14:46 -04:00
..
src Replace manual Clone impl with std derive in retry-error 2022-03-02 17:04:07 +00:00
Cargo.toml Bump caret, retry-error to 0.1.1 2022-04-01 09:14:46 -04:00
README.md Example needs to be the same as the readme 2021-11-30 09:09:42 -05: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. 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