pub struct BoxedStackError { /* private fields */ }Expand description
Type-erased wrapper around Box<dyn StackError + Send + Sync>.
Provides uniform handling of heterogeneous StackError types while
preserving location tracking through the error chain. Use this instead
of Box<dyn StackError + Send + Sync> for shorter type signatures
and automatic From generation by the derive macro.
Note: downcasting to the concrete type is not supported through this
wrapper. Use into_inner() if you need the raw trait object.
Clone is not implemented because the inner trait object
(Box<dyn StackError + Send + Sync>) cannot be cloned.
§Example
use suzunari_error::*;
#[suzunari_error]
#[suzu(display("inner error"))]
struct InnerError {}
#[suzunari_error]
#[suzu(display("outer error"))]
struct OuterError {
source: BoxedStackError,
}
fn inner() -> Result<(), InnerError> {
ensure!(false, InnerSnafu);
Ok(())
}
fn outer() -> Result<(), OuterError> {
inner()
.map_err(BoxedStackError::new)
.context(OuterSnafu)?;
Ok(())
}
let err = outer().unwrap_err();
assert_eq!(err.type_name(), "OuterError");
assert!(err.stack_source().is_some());Implementations§
Source§impl BoxedStackError
impl BoxedStackError
Sourcepub fn new<T: StackError + Send + Sync + 'static>(inner: T) -> Self
pub fn new<T: StackError + Send + Sync + 'static>(inner: T) -> Self
Wraps a concrete StackError in a type-erased box.
Sourcepub fn inner(&self) -> &(dyn StackError + Send + Sync)
pub fn inner(&self) -> &(dyn StackError + Send + Sync)
Returns a reference to the inner trait object.
Sourcepub fn into_inner(self) -> Box<dyn StackError + Send + Sync>
pub fn into_inner(self) -> Box<dyn StackError + Send + Sync>
Unwraps into the inner trait object.
Trait Implementations§
Source§impl Debug for BoxedStackError
impl Debug for BoxedStackError
Source§impl Display for BoxedStackError
impl Display for BoxedStackError
Source§impl Error for BoxedStackError
impl Error for BoxedStackError
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
👎Deprecated since 1.42.0: use the Display impl or to_string()
Source§impl From<Box<dyn StackError + Sync + Send>> for BoxedStackError
impl From<Box<dyn StackError + Sync + Send>> for BoxedStackError
Source§impl From<BoxedStackError> for Box<dyn StackError + Send + Sync>
impl From<BoxedStackError> for Box<dyn StackError + Send + Sync>
Source§fn from(inner: BoxedStackError) -> Self
fn from(inner: BoxedStackError) -> Self
Converts to this type from the input type.
Source§impl StackError for BoxedStackError
impl StackError for BoxedStackError
Auto Trait Implementations§
impl Freeze for BoxedStackError
impl !RefUnwindSafe for BoxedStackError
impl Send for BoxedStackError
impl Sync for BoxedStackError
impl Unpin for BoxedStackError
impl UnsafeUnpin for BoxedStackError
impl !UnwindSafe for BoxedStackError
Blanket Implementations§
Source§impl<T> AsErrorSource for Twhere
T: Error + 'static,
impl<T> AsErrorSource for Twhere
T: Error + 'static,
Source§fn as_error_source(&self) -> &(dyn Error + 'static)
fn as_error_source(&self) -> &(dyn Error + 'static)
For maximum effectiveness, this needs to be called as a method
to benefit from Rust’s automatic dereferencing of method
receivers.
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more