[][src]Trait error_iter::ErrorIter

pub trait ErrorIter: Error + Sized + 'static {
    fn iter_chain(&self) -> ErrorIterator { ... }
fn iter_sources(&self) -> ErrorIterator { ... } }

Implement this trait on your error types for free iterators over their sources!

The default implementation provides iterators for any type that implements std::error::Error.

Provided methods

Important traits for ErrorIterator<'a>
fn iter_chain(&self) -> ErrorIterator

Create an iterator over the error and its chained sources.

use error_iter::ErrorIter;
use thiserror::Error;

#[derive(Debug, Error)]
enum Error {
    #[error("Nested error: {0}")]
    Nested(#[source] Box<Error>),

    #[error("Leaf error")]
    Leaf,
}

impl ErrorIter for Error {}

let error = Error::Nested(Box::new(Error::Leaf));

let mut iter = error.iter_chain();

assert_eq!("Nested error: Leaf error".to_string(), iter.next().unwrap().to_string());
assert_eq!("Leaf error".to_string(), iter.next().unwrap().to_string());
assert!(iter.next().is_none());
assert!(iter.next().is_none());

Important traits for ErrorIterator<'a>
fn iter_sources(&self) -> ErrorIterator

Create an iterator over the chained error sources.

use error_iter::ErrorIter;
use thiserror::Error;

#[derive(Debug, Error)]
enum Error {
    #[error("Nested error: {0}")]
    Nested(#[source] Box<Error>),

    #[error("Leaf error")]
    Leaf,
}

impl ErrorIter for Error {}

let error = Error::Nested(Box::new(Error::Leaf));

let mut iter = error.iter_sources();

assert_eq!("Leaf error".to_string(), iter.next().unwrap().to_string());
assert!(iter.next().is_none());
assert!(iter.next().is_none());
Loading content...

Implementors

Loading content...