bare_err_tree

Macro tree

Source
macro_rules! tree {
    (dyn, $func:expr, $inner:expr, $pkg:expr, $( $x:expr ),* ) => { ... };
    ($func:expr, $inner:expr, $pkg:expr, $( $x:expr ),* ) => { ... };
}
Expand description

Boilerplate reducer for manual ErrTree.

Expands out to ErrTree::with_pkg with $x as source(s). Preface with dyn to use the generic dyn Error rendering.

use bare_err_tree::{tree, ErrTree, ErrTreePkg, AsErrTree};

#[derive(Debug)]
struct Foo(std::io::Error, ErrTreePkg);

impl AsErrTree for Foo {
    fn as_err_tree(&self, func: &mut dyn FnMut(ErrTree<'_>)) {
        // Equivalent to:
        // (func)(bare_err_tree::ErrTree::with_pkg(
        //     &self,
        //     core::iter::once(bare_err_tree::ErrTreeConv::from(&self.0 as &dyn Error))
        //     self.1
        // )
        tree!(dyn, func, self, self.1, &self.0)
    }
}

impl Error for Foo {
    fn source(&self) -> Option<&(dyn Error + 'static)> {
        Some(&self.0)
    }
}
impl Display for Foo {
    ...
}