thistrace 0.1.0

Callsite provenance (file/line/col) for thiserror #[from] conversions via #[track_caller]
Documentation
use std::io;

use thistrace::{origin, trace_frames, traceable, HasTrace};

#[traceable]
#[derive(thiserror::Error, Debug)]
enum E {
    #[error("io")]
    Io(#[from] thistrace::Origin<io::Error>),

    #[error("plain")]
    Plain,
}

fn traced() -> Result<(), E> {
    let err = origin(io::Error::new(io::ErrorKind::Other, "boom"));
    Err(E::from(err))
}

#[test]
fn trace_frames_empty_when_absent() {
    let e = E::Plain;
    assert!(e.trace().is_none());
    assert!(trace_frames(&e).is_empty());
}

#[test]
fn trace_frames_returns_frames_when_present() {
    let e = traced().unwrap_err();
    assert!(e.trace().is_some());
    assert!(!trace_frames(&e).is_empty());
}