Skip to main content

Error

Struct Error 

Source
pub struct Error { /* private fields */ }
Expand description

An error type that wraps an inner type-erased boxed std::error::Error or an Exn frame.

In that, it’s similar to anyhow, but with support for tracking the call site and trees of errors.

§Native error sources

Error::from_error() retains the concrete error and its native source() chain. Use Error::downcast_any_ref() or Error::iter_errors() to inspect the original types, including sources within nested Error values. This also applies when the auto-chain-error feature is enabled.

§The auto-chain-error feature

If it’s enabled, this type is merely a wrapper around ChainedError. This happens automatically so applications that require this don’t have to go through an extra conversion.

When both the tree-error and auto-chain-error features are enabled, the tree-error behavior takes precedence and this type uses the tree-based representation.

Implementations§

Source§

impl Error

Utilities

Source

pub fn error(&self) -> &(dyn Error + 'static)

Return the error stored at this error boundary.

This can be a classification marker hidden from Self::iter_errors(), and is distinct from Self::probable_cause().

Source§

impl Error

Source

pub fn from_error(error: impl Error + Send + Sync + 'static) -> Self

Create a new instance representing the given error.

Source

pub fn from_boxed(error: Box<dyn Error + Send + Sync + 'static>) -> Self

Create a new instance representing an already boxed error.

Source§

impl Error

Source

pub fn iter_errors(&self) -> impl Iterator<Item = &(dyn Error + 'static)> + '_

Lazily visit stored errors and native sources in logical breadth-first order, expanding nested crate::Error values.

The stored error is first unless it is a classification marker. A frame’s native source precedes its explicitly raised children. Concrete error types remain available for downcasting, except for classification markers, which are always transparent to traversal. Use Self::classify() to inspect classifications.

Source

pub fn iter_errors_with_locations( &self, ) -> impl Iterator<Item = DisplaySource<'_>> + '_

Visit the same errors as Self::iter_errors(), with caller locations for explicitly raised frames. The first real source beneath transparent classification markers inherits their frame’s location; other native sources have no caller location of their own. DisplaySource can render either representation.

Source

pub fn downcast_any_ref<T: Error + 'static>(&self) -> Option<&T>

Find the first diagnostic error that downcasts to T in logical breadth-first order. Classification markers are omitted, as in Self::iter_errors().

Source

pub fn probable_cause(&self) -> &(dyn Error + 'static)

Follow the unique causal path to a leaf or aggregate, as in crate::exn::Frame::probable_cause().

Classification markers are always transparent to selection. Nested error graphs and explicitly raised children both participate, so a selected boundary at a branch is not replaced by one of its nested causes. If selection stays at the root, return the stored error, including a classification-only root.

Source

pub fn metadata(&self) -> impl Iterator<Item = &Metadata> + '_

Visit the non-empty Metadata dictionaries of crate::Message contexts in error traversal order. Dictionaries remain separate. Functions returning metadata document the keys in each context.

To match a class and values on the same message, use Self::classify() and Classification::error() instead of combining independent classification and metadata searches.

Source

pub fn classify(&self) -> Classifications<'_> ⓘ

Return all known classifications in the same logical breadth-first order as Self::iter_errors().

Unknown errors are omitted. Classifications aren’t deduplicated because distinct errors may independently have the same meaning. Each item retains the classified error for downcasting and origin inspection.

Source

pub fn is_retryable(&self) -> bool

Return true if any stored error or native source has an explicit crate::Class::Retryable classification.

crate::Message and crate::ClassificationMarker can supply this classification. Nested crate::Error values are inspected recursively. Unlike Self::can_retry(), this does not infer retryability from I/O error kinds.

Source

pub fn is_resource_exhausted(&self) -> bool

Return true if any stored error or native source reports resource exhaustion.

This recognizes messages or markers with crate::Class::ResourceExhaustion, std::collections::TryReserveError, and std::io::ErrorKind::OutOfMemory, including within nested crate::Error values.

Source

pub fn can_retry(&self) -> bool

Return true if any stored error, or an error in its source() chain, is:

Nested crate::Error values are inspected recursively. false only means that no known retryable error was found; it does not guarantee that retrying cannot succeed.

Source

pub fn can_retry_lenient(&self) -> bool

Apply Self::can_retry(), also accepting std::io::Error with kind UnexpectedEof, OutOfMemory, BrokenPipe, AddrInUse, ConnectionAborted, ConnectionReset, or ConnectionRefused.

This applies a more lenient policy than Self::can_retry. Nested crate::Error values are inspected recursively. false only means that no known retryable error was found; it does not guarantee that retrying cannot succeed.

Source

pub fn is_corrupted(&self) -> bool

Return true if malformed or internally inconsistent data caused the failure.

Source

pub fn is_not_found(&self) -> bool

Return true if a requested resource was not found.

Source

pub fn is_validation(&self) -> bool

Return true if invalid input caused the failure.

Trait Implementations§

Source§

impl Debug for Error

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for Error

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for Error

Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Return the first source of an Exn error, or the source of a boxed error.

1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0:

use the Display impl or to_string()

1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl<E> From<Exn<E>> for Error
where E: Error + Send + Sync + 'static,

Source§

fn from(err: Exn<E>) -> Self

Converts to this type from the input type.
Source§

impl From<TestError> for Error

Source§

fn from(error: TestError) -> Self

Converts to this type from the input type.
Source§

impl PartialEq<&str> for Error

Source§

fn eq(&self, other: &&str) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl PartialEq<String> for Error

Source§

fn eq(&self, other: &String) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl PartialEq<str> for Error

Source§

fn eq(&self, other: &str) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more

Auto Trait Implementations§

§

impl !RefUnwindSafe for Error

§

impl !UnwindSafe for Error

§

impl Freeze for Error

§

impl Send for Error

§

impl Sync for Error

§

impl Unpin for Error

§

impl UnsafeUnpin for Error

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> ErrorExt for T
where T: Error + Send + Sync + 'static,

Source§

fn raise(self) -> Exn<Self>
where Self: Sized,

Raise this error as a new exception.
Source§

fn and_raise<T: Error + Send + Sync + 'static>(self, context: T) -> Exn<T>
where Self: Sized,

Raise this error as a child of a new exception with the given context error. Read more
Source§

fn raise_erased(self) -> Exn
where Self: Sized,

Raise this error as a new exception, with type erasure.
Source§

fn raise_all<T, I>(self, sources: I) -> Exn<Self>
where Self: Sized, T: Error + Send + Sync + 'static, I: IntoIterator, I::Item: Into<Exn<T>>,

Raise this error as a new exception, with sources as causes.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.