error2 0.13.2

A simple error handle library for Rust
Documentation
use std::{
    error::Error,
    fmt::{self, Debug, Display, Formatter},
};

use crate::{Backtrace, Error2};

pub(super) struct StdErr<T> {
    pub(super) source: T,
    pub(super) backtrace: Backtrace,
}

impl<T> StdErr<T> {
    pub(super) fn new(source: T) -> Self
    where
        T: Error + Send + Sync + 'static,
    {
        let backtrace = Backtrace::with_head(&source);
        Self { source, backtrace }
    }
}

impl<T: Display> Display for StdErr<T> {
    #[inline]
    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
        Display::fmt(&self.source, f)
    }
}

impl<T: Debug> Debug for StdErr<T> {
    #[inline]
    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
        Debug::fmt(&self.source, f)
    }
}

impl<T: Error> Error for StdErr<T> {
    #[inline]
    fn source(&self) -> Option<&(dyn Error + 'static)> {
        Error::source(&self.source)
    }
}

impl<T: Error> Error2 for StdErr<T> {
    #[inline]
    fn backtrace(&self) -> &Backtrace {
        &self.backtrace
    }

    #[inline]
    fn backtrace_mut(&mut self) -> &mut Backtrace {
        &mut self.backtrace
    }
}