#[macro_use]
extern crate failure;
use failure::{err_msg, Error, Fail};
#[derive(Debug, Fail)]
#[fail(display = "my wrapping error")]
struct WrappingError(#[fail(cause)] Error);
fn bad_function() -> Result<(), WrappingError> {
Err(WrappingError(err_msg("this went bad")))
}
fn main() {
for cause in Fail::iter_causes(&bad_function().unwrap_err()) {
println!("{}", cause);
}
}