Skip to main content

Error

Trait Error 

1.0.0 · Source
pub trait Error: Debug + Display {
    // Provided methods
    fn source(&self) -> Option<&(dyn Error + 'static)> { ... }
    fn description(&self) -> &str { ... }
    fn cause(&self) -> Option<&dyn Error> { ... }
    fn provide<'a>(&'a self, request: &mut Request<'a>) { ... }
}
Expand description

Error is a trait representing the basic expectations for error values, i.e., values of type E in Result<T, E>.

Errors must describe themselves through the Display and Debug traits. Error messages are typically concise lowercase sentences without trailing punctuation:

let err = "NaN".parse::<u32>().unwrap_err();
assert_eq!(err.to_string(), "invalid digit found in string");

§Error source

Errors may provide cause information. Error::source() is generally used when errors cross “abstraction boundaries”. If one module must report an error that is caused by an error from a lower-level module, it can allow accessing that error via Error::source(). This makes it possible for the high-level module to provide its own errors while also revealing some of the implementation for debugging.

In error types that wrap an underlying error, the underlying error should be either returned by the outer error’s Error::source(), or rendered by the outer error’s Display implementation, but not both.

§Example

Implementing the Error trait only requires that Debug and Display are implemented too.

use std::error::Error;
use std::fmt;
use std::path::PathBuf;

#[derive(Debug)]
struct ReadConfigError {
    path: PathBuf
}

impl fmt::Display for ReadConfigError {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        let path = self.path.display();
        write!(f, "unable to read configuration at {path}")
    }
}

impl Error for ReadConfigError {}

Provided Methods§

1.30.0 · Source

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

Returns the lower-level source of this error, if any.

§Examples
use std::error::Error;
use std::fmt;

#[derive(Debug)]
struct SuperError {
    source: SuperErrorSideKick,
}

impl fmt::Display for SuperError {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "SuperError is here!")
    }
}

impl Error for SuperError {
    fn source(&self) -> Option<&(dyn Error + 'static)> {
        Some(&self.source)
    }
}

#[derive(Debug)]
struct SuperErrorSideKick;

impl fmt::Display for SuperErrorSideKick {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "SuperErrorSideKick is here!")
    }
}

impl Error for SuperErrorSideKick {}

fn get_super_error() -> Result<(), SuperError> {
    Err(SuperError { source: SuperErrorSideKick })
}

fn main() {
    match get_super_error() {
        Err(e) => {
            println!("Error: {e}");
            println!("Caused by: {}", e.source().unwrap());
        }
        _ => println!("No error"),
    }
}
1.0.0 · Source

fn description(&self) -> &str

👎Deprecated since 1.42.0:

use the Display impl or to_string()

if let Err(e) = "xc".parse::<u32>() {
    // Print `e` itself, no need for description().
    eprintln!("Error: {e}");
}
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.

Used in conjunction with Request::provide_value and Request::provide_ref to extract references to member variables from dyn Error trait objects.

§Example
#![feature(error_generic_member_access)]
use core::fmt;
use core::error::{request_ref, Request};

#[derive(Debug)]
enum MyLittleTeaPot {
    Empty,
}

#[derive(Debug)]
struct MyBacktrace {
    // ...
}

impl MyBacktrace {
    fn new() -> MyBacktrace {
        // ...
    }
}

#[derive(Debug)]
struct Error {
    backtrace: MyBacktrace,
}

impl fmt::Display for Error {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "Example Error")
    }
}

impl std::error::Error for Error {
    fn provide<'a>(&'a self, request: &mut Request<'a>) {
        request
            .provide_ref::<MyBacktrace>(&self.backtrace);
    }
}

fn main() {
    let backtrace = MyBacktrace::new();
    let error = Error { backtrace };
    let dyn_error = &error as &dyn std::error::Error;
    let backtrace_ref = request_ref::<MyBacktrace>(dyn_error).unwrap();

    assert!(core::ptr::eq(&error.backtrace, backtrace_ref));
    assert!(request_ref::<MyLittleTeaPot>(dyn_error).is_none());
}
§Delegating Impls

Warning: We recommend implementors avoid delegating implementations of provide to source error implementations.

This method should expose context from the current piece of the source chain only, not from sources that are exposed in the chain of sources. Delegating provide implementations cause the same context to be provided by multiple errors in the chain of sources which can cause unintended duplication of information in error reports or require heuristics to deduplicate.

In other words, the following implementation pattern for provide is discouraged and should not be used for Error types exposed in public APIs to third parties.

struct MyError {
    source: Error,
}

impl std::error::Error for MyError {
    fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
        Some(&self.source)
    }

    fn provide<'a>(&'a self, request: &mut Request<'a>) {
        self.source.provide(request) // <--- Discouraged
    }
}

Implementations§

Source§

impl dyn Error

1.3.0 · Source

pub fn is<T>(&self) -> bool
where T: Error + 'static,

Returns true if the inner type is the same as T.

1.3.0 · Source

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

Returns some reference to the inner value if it is of type T, or None if it isn’t.

1.3.0 · Source

pub fn downcast_mut<T>(&mut self) -> Option<&mut T>
where T: Error + 'static,

Returns some mutable reference to the inner value if it is of type T, or None if it isn’t.

Source§

impl dyn Error + Send

1.3.0 · Source

pub fn is<T>(&self) -> bool
where T: Error + 'static,

Forwards to the method defined on the type dyn Error.

1.3.0 · Source

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

Forwards to the method defined on the type dyn Error.

1.3.0 · Source

pub fn downcast_mut<T>(&mut self) -> Option<&mut T>
where T: Error + 'static,

Forwards to the method defined on the type dyn Error.

Source§

impl dyn Error + Send + Sync

1.3.0 · Source

pub fn is<T>(&self) -> bool
where T: Error + 'static,

Forwards to the method defined on the type dyn Error.

1.3.0 · Source

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

Forwards to the method defined on the type dyn Error.

1.3.0 · Source

pub fn downcast_mut<T>(&mut self) -> Option<&mut T>
where T: Error + 'static,

Forwards to the method defined on the type dyn Error.

Source§

impl dyn Error

Source

pub fn sources(&self) -> Source<'_> ⓘ

🔬This is a nightly-only experimental API. (error_iter)

Returns an iterator starting with the current error and continuing with recursively calling Error::source.

If you want to omit the current error and only use its sources, use skip(1).

§Examples
#![feature(error_iter)]
use std::error::Error;
use std::fmt;

#[derive(Debug)]
struct A;

#[derive(Debug)]
struct B(Option<Box<dyn Error + 'static>>);

impl fmt::Display for A {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "A")
    }
}

impl fmt::Display for B {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "B")
    }
}

impl Error for A {}

impl Error for B {
    fn source(&self) -> Option<&(dyn Error + 'static)> {
        self.0.as_ref().map(|e| e.as_ref())
    }
}

let b = B(Some(Box::new(A)));

// let err : Box<Error> = b.into(); // or
let err = &b as &dyn Error;

let mut iter = err.sources();

assert_eq!("B".to_string(), iter.next().unwrap().to_string());
assert_eq!("A".to_string(), iter.next().unwrap().to_string());
assert!(iter.next().is_none());
assert!(iter.next().is_none());
Source§

impl dyn Error

1.3.0 · Source

pub fn downcast<T>(self: Box<dyn Error>) -> Result<Box<T>, Box<dyn Error>>
where T: Error + 'static,

Attempts to downcast the box to a concrete type.

Source§

impl dyn Error + Send

1.3.0 · Source

pub fn downcast<T>( self: Box<dyn Error + Send>, ) -> Result<Box<T>, Box<dyn Error + Send>>
where T: Error + 'static,

Attempts to downcast the box to a concrete type.

Source§

impl dyn Error + Send + Sync

1.3.0 · Source

pub fn downcast<T>( self: Box<dyn Error + Send + Sync>, ) -> Result<Box<T>, Box<dyn Error + Send + Sync>>
where T: Error + 'static,

Attempts to downcast the box to a concrete type.

Trait Implementations§

Source§

impl Value for dyn Error

Available on crate feature std only.
Source§

fn record(&self, key: &Field, visitor: &mut dyn Visit)

Visits this value with the given Visitor.
Source§

impl Value for dyn Error + Send

Available on crate feature std only.
Source§

fn record(&self, key: &Field, visitor: &mut dyn Visit)

Visits this value with the given Visitor.
Source§

impl Value for dyn Error + Sync

Available on crate feature std only.
Source§

fn record(&self, key: &Field, visitor: &mut dyn Visit)

Visits this value with the given Visitor.
Source§

impl Value for dyn Error + Send + Sync

Available on crate feature std only.
Source§

fn record(&self, key: &Field, visitor: &mut dyn Visit)

Visits this value with the given Visitor.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§

1.65.0 · Source§

impl !Error for &str

1.100.0 · Source§

impl Error for !

Source§

impl Error for Aborted

Available on crate feature std only.
1.26.0 · Source§

impl Error for AccessError

Source§

impl Error for AcquireError

1.4.0 · Source§

impl Error for core::net::parser::AddrParseError

Source§

impl Error for rustls_pki_types::server_name::AddrParseError

Available on crate feature std only.
1.100.0 · Source§

impl Error for AllocError

Source§

impl Error for AnyDelimiterCodecError

Source§

impl Error for BernoulliError

1.13.0 · Source§

impl Error for BorrowError

1.13.0 · Source§

impl Error for BorrowMutError

Source§

impl Error for regex_automata::dfa::onepass::BuildError

Available on crate feature std only.
Source§

impl Error for regex_automata::hybrid::error::BuildError

Available on crate feature std only.
Source§

impl Error for regex_automata::meta::error::BuildError

Available on crate feature std only.
Source§

impl Error for regex_automata::nfa::thompson::error::BuildError

Available on crate feature std only.
Source§

impl Error for aho_corasick::util::error::BuildError

Available on crate feature std only.
Source§

impl Error for CacheError

Available on crate feature std only.
Source§

impl Error for Canceled

Available on crate feature std only.
Source§

impl Error for CaseFoldError

Available on crate feature std only.
1.34.0 · Source§

impl Error for CharTryFromError

Source§

impl Error for ClosedStream

Source§

impl Error for CompressError

Source§

impl Error for ConfigError

Source§

impl Error for ConnectError

Source§

impl Error for h3::error::error::ConnectionError

Source§

impl Error for quinn_proto::connection::ConnectionError

Source§

impl Error for ConnectionErrorIncoming

Source§

impl Error for DataError

1.9.0 · Source§

impl Error for DecodeUtf16Error

Source§

impl Error for DecompressError

Source§

impl Error for DeserializeError

Available on crate feature std only.
Source§

impl Error for EarlyDataError

Available on crate feature std only.
Source§

impl Error for Elapsed

Source§

impl Error for EmitterError

Source§

impl Error for Empty

Source§

impl Error for EncodeError

Available on crate feature std only.
Source§

impl Error for EncryptError

Available on crate feature std only.
Source§

impl Error for EnterError

Source§

impl Error for Errno

Available on crate feature std only.
1.11.0 · Source§

impl Error for core::fmt::Error

1.0.0 · Source§

impl Error for core::io::error::Error

Source§

impl Error for rand::distr::uniform::Error

Source§

impl Error for rand::distr::weighted::Error

Source§

impl Error for getrandom::error::Error

Source§

impl Error for serde_json::error::Error

Source§

impl Error for serde_core::de::value::Error

Available on crate feature std only.
Source§

impl Error for tokio::time::error::Error

Source§

impl Error for icu_collections::codepointtrie::error::Error

Source§

impl Error for serde_xml_rs::error::Error

Source§

impl Error for xml::reader::error::Error

Source§

impl Error for serde_urlencoded::ser::Error

Source§

impl Error for http::error::Error

Source§

impl Error for quinn_proto::transport_parameters::Error

Source§

impl Error for quinn_proto::transport_error::Error

Source§

impl Error for rustls::error::Error

Available on crate feature std only.
Source§

impl Error for rustls_pki_types::pem::Error

Available on crate feature std only.
Source§

impl Error for webpki::error::Error

Available on crate feature std only.
Source§

impl Error for regex::error::Error

Available on crate feature std only.
Source§

impl Error for regex_syntax::ast::Error

Available on crate feature std only.
Source§

impl Error for regex_syntax::error::Error

Available on crate feature std only.
Source§

impl Error for regex_syntax::hir::Error

Available on crate feature std only.
Source§

impl Error for h2::error::Error

Source§

impl Error for ignore::Error

Source§

impl Error for globset::Error

Source§

impl Error for walkdir::error::Error

Source§

impl Error for notify::error::Error

Source§

impl Error for Errors

Available on crate feature std only.
Source§

impl Error for EuvError

Implements Error for EuvError so it integrates with the Rust error ecosystem.

Source§

impl Error for EventMaskParseError

Source§

impl Error for ExitStatusError

Source§

impl Error for FinishError

1.69.0 · Source§

impl Error for FromBytesUntilNulError

1.17.0 · Source§

impl Error for FromBytesWithNulError

Source§

impl Error for FromHexError

Available on crate feature std only.
1.0.0 · Source§

impl Error for euv_cli::FromUtf8Error

Source§

impl Error for bstr::ext_vec::FromUtf8Error

Available on crate feature std only.
1.0.0 · Source§

impl Error for FromUtf16Error

1.58.0 · Source§

impl Error for FromVecWithNulError

1.86.0 · Source§

impl Error for core::slice::GetDisjointMutError

Source§

impl Error for slab::GetDisjointMutError

Available on crate feature std only.
Source§

impl Error for indexmap::GetDisjointMutError

Source§

impl Error for GroupInfoError

Available on crate feature std only.
Source§

impl Error for HttpUrlError

Implements the std::error::Error trait for HttpUrlError.

Source§

impl Error for ImmutableEntitiesError

1.7.0 · Source§

impl Error for IntoStringError

Source§

impl Error for InvalidDnsNameError

Available on crate feature std only.
Source§

impl Error for InvalidHeaderName

Source§

impl Error for InvalidHeaderValue

Source§

impl Error for InvalidMethod

Source§

impl Error for InvalidStatusCode

Source§

impl Error for InvalidUri

Source§

impl Error for InvalidUriParts

Source§

impl Error for JoinError

1.0.0 · Source§

impl Error for JoinPathsError

1.28.0 · Source§

impl Error for LayoutError

Source§

impl Error for LengthDelimitedCodecError

Source§

impl Error for LinesCodecError

Source§

impl Error for regex_automata::util::search::MatchError

Available on crate feature std only.
Source§

impl Error for aho_corasick::util::error::MatchError

Available on crate feature std only.
Source§

impl Error for MatchesError

Source§

impl Error for MaxSizeReached

Source§

impl Error for NoInitialCipherSuite

Source§

impl Error for NormalizeError

1.0.0 · Source§

impl Error for NulError

Source§

impl Error for OneshotWithSecretError

Source§

impl Error for OtherError

Available on crate feature std only.
Source§

impl Error for PacketDecodeError

1.0.0 · Source§

impl Error for ParseBoolError

1.20.0 · Source§

impl Error for ParseCharError

Source§

impl Error for url::parser::ParseError

Available on crate feature std only.
Source§

impl Error for icu_locale_core::parser::errors::ParseError

Source§

impl Error for tinystr::error::ParseError

1.0.0 · Source§

impl Error for ParseFloatError

1.0.0 · Source§

impl Error for ParseIntError

Source§

impl Error for ParseLevelError

Available on crate feature std only.
Source§

impl Error for ParseLevelFilterError

Available on crate feature std only.
Source§

impl Error for regex_automata::util::primitives::PatternIDError

Available on crate feature std only.
Source§

impl Error for aho_corasick::util::primitives::PatternIDError

Available on crate feature std only.
Source§

impl Error for PatternSetInsertError

Available on crate feature std only.
Source§

impl Error for PreferencesParseError

Source§

impl Error for QrError

Source§

impl Error for quinn::recv_stream::ReadError

Source§

impl Error for quinn_proto::connection::streams::recv::ReadError

Source§

impl Error for ReadExactError

Source§

impl Error for ReadToEndError

Source§

impl Error for ReadableError

1.0.0 · Source§

impl Error for std::sync::mpsc::RecvError

Source§

impl Error for tokio::sync::broadcast::error::RecvError

Source§

impl Error for tokio::sync::oneshot::error::RecvError

Source§

impl Error for tokio::sync::watch::error::RecvError

Source§

impl Error for futures_channel::mpsc::RecvError

1.15.0 · Source§

impl Error for std::sync::mpsc::RecvTimeoutError

Source§

impl Error for RequestError

Implements the std::error::Error trait for RequestError.

Source§

impl Error for ResetError

Source§

impl Error for ResponseError

Implements the std::error::Error trait for ResponseError. This allows ResponseError to be treated as a standard Rust error type.

Source§

impl Error for quinn::incoming::RetryError

Source§

impl Error for quinn_proto::endpoint::RetryError

Source§

impl Error for tokio::net::tcp::split_owned::ReuniteError

Source§

impl Error for tokio::net::unix::split_owned::ReuniteError

Source§

impl Error for quinn::connection::SendDatagramError

Source§

impl Error for quinn_proto::connection::datagrams::SendDatagramError

Source§

impl Error for futures_channel::mpsc::SendError

Source§

impl Error for SerializeError

Available on crate feature std only.
Source§

impl Error for SetGlobalDefaultError

Available on crate feature std only.
Source§

impl Error for SmallIndexError

Available on crate feature std only.
Source§

impl Error for SpawnError

Available on crate feature std only.
Source§

impl Error for StartError

Available on crate feature std only.
Source§

impl Error for regex_automata::util::primitives::StateIDError

Available on crate feature std only.
Source§

impl Error for aho_corasick::util::primitives::StateIDError

Available on crate feature std only.
Source§

impl Error for StoppedError

Source§

impl Error for StrSimError

Source§

impl Error for StreamError

Source§

impl Error for StreamErrorIncoming

1.7.0 · Source§

impl Error for StripPrefixError

1.8.0 · Source§

impl Error for SystemTimeError

Source§

impl Error for ToStrError

Source§

impl Error for TryAcquireError

Source§

impl Error for TryCurrentError

1.59.0 · Source§

impl Error for TryFromCharError

1.66.0 · Source§

impl Error for TryFromFloatSecsError

1.34.0 · Source§

impl Error for TryFromIntError

1.34.0 · Source§

impl Error for TryFromSliceError

Source§

impl Error for TryGetError

Available on crate feature std only.
1.89.0 · Source§

impl Error for std::fs::TryLockError

Source§

impl Error for tokio::sync::mutex::TryLockError

1.0.0 · Source§

impl Error for std::sync::mpsc::TryRecvError

Source§

impl Error for tokio::sync::broadcast::error::TryRecvError

Source§

impl Error for tokio::sync::mpsc::error::TryRecvError

Source§

impl Error for tokio::sync::oneshot::error::TryRecvError

Source§

impl Error for futures_channel::mpsc::TryRecvError

1.57.0 · Source§

impl Error for alloc::collections::TryReserveError

Source§

impl Error for indexmap::TryReserveError

Source§

impl Error for hashbrown::TryReserveError

Source§

impl Error for UleError

Source§

impl Error for UnexpectedEnd

Source§

impl Error for UnicodeWordBoundaryError

Available on crate feature std only.
Source§

impl Error for UnicodeWordError

Available on crate feature std only.
Source§

impl Error for UnorderedKeyError

Source§

impl Error for UnsupportedOperationError

Available on crate feature std only.
1.0.0 · Source§

impl Error for core::str::error::Utf8Error

Source§

impl Error for bstr::utf8::Utf8Error

Available on crate feature std only.
1.0.0 · Source§

impl Error for VarError

Source§

impl Error for VarIntBoundsExceeded

Source§

impl Error for VerifierBuilderError

Available on crate feature std only.
Source§

impl Error for quinn::send_stream::WriteError

Source§

impl Error for quinn_proto::connection::streams::send::WriteError

1.56.0 · Source§

impl Error for WriterPanicked

Source§

impl Error for ZeroTrieBuildError

1.51.0 · Source§

impl<'a, T> Error for &'a T
where T: Error + ?Sized,

1.8.0 · Source§

impl<E, A> Error for Box<E, A>
where E: Error, A: Allocator,

Source§

impl<F> Error for clap_builder::error::Error<F>
where F: ErrorFormatter,

Source§

impl<S> Error for SecretTooShortError<S>

Source§

impl<S> Error for SecretWithSeedError<S>

Source§

impl<T, E> Error for TryChunksError<T, E>
where E: Debug + Display,

Available on crate feature std only.
Source§

impl<T, E> Error for TryReadyChunksError<T, E>
where E: Debug + Display,

Available on crate feature std only.
Source§

impl<T, Item> Error for futures_util::stream::stream::split::ReuniteError<T, Item>
where T: Any,

Available on crate feature std only.
1.52.0 · Source§

impl<T> Error for Arc<T>
where T: Error + ?Sized,

Source§

impl<T> Error for AsyncFdRegisterError<T>

1.0.0 · Source§

impl<T> Error for PoisonError<T>

Source§

impl<T> Error for PollSendError<T>
where T: Debug,

Source§

impl<T> Error for std::sync::oneshot::RecvTimeoutError<T>

Source§

impl<T> Error for futures_util::io::split::ReuniteError<T>
where T: Any,

Available on crate feature std only.
1.0.0 · Source§

impl<T> Error for std::sync::mpsc::SendError<T>

Source§

impl<T> Error for tokio::sync::mpsc::error::SendError<T>

Source§

impl<T> Error for tokio::sync::watch::error::SendError<T>

Source§

impl<T> Error for tokio::sync::broadcast::error::SendError<T>
where T: Debug,

Source§

impl<T> Error for std::sync::mpmc::error::SendTimeoutError<T>

Source§

impl<T> Error for tokio::sync::mpsc::error::SendTimeoutError<T>

Available on crate feature time only.
Source§

impl<T> Error for SetError<T>
where T: Debug,

Source§

impl<T> Error for SetOnceError<T>
where T: Debug,

Source§

impl<T> Error for ThinBox<T>
where T: Error + ?Sized,

1.0.0 · Source§

impl<T> Error for std::sync::poison::TryLockError<T>

Source§

impl<T> Error for std::sync::oneshot::TryRecvError<T>

1.0.0 · Source§

impl<T> Error for std::sync::mpsc::TrySendError<T>

Source§

impl<T> Error for tokio::sync::mpsc::error::TrySendError<T>

Source§

impl<T> Error for futures_channel::mpsc::TrySendError<T>
where T: Any,

1.0.0 · Source§

impl<W> Error for IntoInnerError<W>
where W: Send + Debug,