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 {
...
}