#![cfg_attr(feature = "nightly", feature(error_generic_member_access))]
#![cfg_attr(not(feature = "std"), no_std)]
#[doc(hidden)]
pub extern crate alloc;
mod as_dyn;
mod backtrace;
mod ptr;
mod report;
pub use as_dyn::AsDyn;
pub use report::{AsReport, Report};
pub use thiserror_ext_derive::*;
#[doc(hidden)]
pub mod __private {
#[cfg(feature = "std")]
pub use crate::backtrace::AlwaysBacktrace;
#[cfg(feature = "nightly")]
pub use crate::backtrace::MaybeBacktrace;
pub use crate::backtrace::NoExtraBacktrace;
pub use crate::ptr::ErrorArc;
pub use crate::ptr::ErrorBox;
}
macro_rules! for_dyn_error_types {
($macro:ident) => {
$macro! {
{ dyn core::error::Error },
{ dyn core::error::Error + core::marker::Send },
{ dyn core::error::Error + core::marker::Sync },
{ dyn core::error::Error + core::marker::Send + core::marker::Sync },
{ dyn core::error::Error + core::marker::Send + core::marker::Sync + core::panic::UnwindSafe },
}
};
}
pub(crate) use for_dyn_error_types;
pub(crate) mod error_sealed {
pub trait Sealed {}
impl<T: core::error::Error> Sealed for T {}
macro_rules! impl_sealed {
($({$ty:ty },)*) => {
$(
impl Sealed for $ty {}
)*
};
}
for_dyn_error_types! { impl_sealed }
}