thiserror-ext 0.3.0

Useful extension utilities for `thiserror`.
Documentation
#![cfg_attr(feature = "backtrace", feature(error_generic_member_access))]

use thiserror::Error;
use thiserror_ext::{Box, ReportDebug};

#[derive(Error, ReportDebug, Default)]
#[error("inner")]
struct Inner;

#[derive(Error, ReportDebug, Default, Box)]
#[thiserror_ext(newtype(name = BoxOuter))]
#[error("outer")]
struct Outer {
    #[source]
    inner: Inner,
}

#[test]
fn test_report_debug() {
    let error = Outer::default();

    expect_test::expect!["outer: inner"].assert_eq(&format!("{:?}", error));

    expect_test::expect![[r#"
    outer

    Caused by:
      inner
"#]]
    .assert_eq(&format!("{:#?}", error));

    let boxed = BoxOuter::from(error);

    expect_test::expect!["outer: inner"].assert_eq(&format!("{:?}", boxed));
}

#[test]
#[should_panic]
fn test_unwrap() {
    let error = Outer::default();
    let _ = Err::<(), _>(error).unwrap();
}

#[test]
#[should_panic]
fn test_expect() {
    let error = Outer::default();
    let _ = Err::<(), _>(error).expect("intentional panic");
}