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());
}

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.

Implementors§

1.65.0 · Source§

impl !Error for &str

Source§

impl Error for ParseAlphabetError

Available on crate features std only.
Source§

impl Error for base64::decode::DecodeError

Available on crate features std only.
Source§

impl Error for DecodeSliceError

Available on crate features std only.
Source§

impl Error for EncodeSliceError

Available on crate features std only.
Source§

impl Error for RoundingError

Available on crate feature std only.
Source§

impl Error for crossbeam_channel::err::RecvTimeoutError

Source§

impl Error for crossbeam_channel::err::TryRecvError

Source§

impl Error for ConnectionError

Source§

impl Error for diesel::result::Error

Source§

impl Error for humantime::date::Error

Source§

impl Error for humantime::duration::Error

Source§

impl Error for LinuxI2CError

Source§

impl Error for GetTimezoneError

Source§

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

Source§

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

Source§

impl Error for PreferencesParseError

Source§

impl Error for nix::errno::consts::Errno

Source§

impl Error for rand::distr::bernoulli::BernoulliError

Available on crate feature std only.
Source§

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

Available on crate feature std only.
Source§

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

Available on crate feature std only.
Source§

impl Error for rand::distributions::bernoulli::BernoulliError

Available on crate feature std only.
Source§

impl Error for rand::distributions::weighted::WeightedError

Available on crate feature std only.
Source§

impl Error for rand::distributions::weighted_index::WeightedError

Available on crate feature std only.
Source§

impl Error for regex::error::Error

Available on crate feature std only.
Source§

impl Error for StartError

Available on crate feature std only.
Source§

impl Error for regex_syntax::error::Error

Available on crate feature std only.
Source§

impl Error for EarlyDataError

Available on crate feature std only.
Source§

impl Error for rustls::conn::unbuffered::EncodeError

Available on crate feature std only.
Source§

impl Error for EncryptError

Available on crate feature std only.
Source§

impl Error for rustls::error::Error

Available on crate feature std only.
Source§

impl Error for VerifierBuilderError

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 BetaError

Source§

impl Error for BinomialError

Source§

impl Error for CategoricalError

Source§

impl Error for CauchyError

Source§

impl Error for ChiError

Source§

impl Error for DiracError

Source§

impl Error for DirichletError

Source§

impl Error for DiscreteUniformError

Source§

impl Error for ExpError

Source§

impl Error for FisherSnedecorError

Source§

impl Error for GammaError

Source§

impl Error for GeometricError

Source§

impl Error for GumbelError

Source§

impl Error for HypergeometricError

Source§

impl Error for InverseGammaError

Source§

impl Error for LaplaceError

Source§

impl Error for LogNormalError

Source§

impl Error for MultinomialError

Source§

impl Error for MultivariateNormalError

Source§

impl Error for MultivariateStudentError

Source§

impl Error for NegativeBinomialError

Source§

impl Error for NormalError

Source§

impl Error for ParetoError

Source§

impl Error for PoissonError

Source§

impl Error for StudentsTError

Source§

impl Error for TriangularError

Source§

impl Error for UniformError

Source§

impl Error for WeibullError

Source§

impl Error for BetaFuncError

Source§

impl Error for GammaFuncError

Source§

impl Error for FishersExactTestError

Source§

impl Error for strum::ParseError

Available on crate feature std only.
Source§

impl Error for tinystr::error::ParseError

Source§

impl Error for ureq::error::Error

Source§

impl Error for url::parser::ParseError

Available on crate feature std only.
Source§

impl Error for webpki::error::Error

Available on crate feature std only.
Source§

impl Error for ZeroTrieBuildError

Source§

impl Error for UleError

Source§

impl Error for zmq::DecodeError

Source§

impl Error for zmq::EncodeError

Source§

impl Error for zmq::Error

Source§

impl Error for AnalysisError

Source§

impl Error for CalibrationError

Source§

impl Error for IPBusError

Source§

impl Error for MasterTriggerError

Source§

impl Error for RunError

Source§

impl Error for SensorError

Source§

impl Error for SerializationError

Source§

impl Error for StagingError

Source§

impl Error for TofError

Source§

impl Error for UserError

Source§

impl Error for WaveformError

1.0.0 · Source§

impl Error for VarError

1.89.0 · Source§

impl Error for gondola_core::prelude::fs::TryLockError

1.8.0 · Source§

impl Error for Infallible

1.17.0 · Source§

impl Error for FromBytesWithNulError

1.86.0 · Source§

impl Error for core::slice::GetDisjointMutError

1.15.0 · Source§

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

1.0.0 · Source§

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

Source§

impl Error for TimerError

Available on crate feature std only.
Source§

impl Error for !

Source§

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

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 aho_corasick::util::primitives::PatternIDError

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 chrono::format::ParseError

Available on crate features core-error or std only.
Source§

impl Error for ParseMonthError

Available on crate feature std only.
Source§

impl Error for OutOfRange

Available on crate feature std only.
Source§

impl Error for OutOfRangeError

Available on crate features std or core-error only.
Source§

impl Error for ParseWeekdayError

Available on crate feature std only.
Source§

impl Error for crossbeam_channel::err::RecvError

Source§

impl Error for SelectTimeoutError

Source§

impl Error for TrySelectError

Source§

impl Error for csv::deserializer::DeserializeError

Source§

impl Error for csv::error::Error

Source§

impl Error for csv::error::FromUtf8Error

Source§

impl Error for csv::error::Utf8Error

Source§

impl Error for DeserializeFieldError

Source§

impl Error for EmptyChangeset

Source§

impl Error for EmptyQuery

Source§

impl Error for UnexpectedEndOfRow

Source§

impl Error for UnexpectedNullError

Source§

impl Error for ApplyError

Source§

impl Error for ParsePatchError

Source§

impl Error for errno::Errno

Available on crate feature std only.
Source§

impl Error for CompressError

Source§

impl Error for DecompressError

Source§

impl Error for getrandom::error::Error

Source§

impl Error for getrandom::error::Error

Source§

impl Error for GlobError

Source§

impl Error for PatternError

Source§

impl Error for DataError

Source§

impl Error for Errors

Available on crate feature std only.
Source§

impl Error for libsqlite3_sys::error::Error

Source§

impl Error for ParseLevelError

Available on crate feature std only.
Source§

impl Error for SetLoggerError

Available on crate feature std only.
Source§

impl Error for ClearEnvError

Source§

impl Error for ParseBigIntError

Source§

impl Error for num_rational::ParseRatioError

Available on crate feature std only.
Source§

impl Error for num_rational::ParseRatioError

Available on crate feature std only.
Source§

impl Error for Empty

Available on crate feature std only.
Source§

impl Error for ReadError

Source§

impl Error for rand_core::error::Error

Available on crate feature std only.
Source§

impl Error for rand_core::error::Error

Available on crate feature std only.
Source§

impl Error for OsError

Available on crate feature std only.
Source§

impl Error for ThreadPoolBuildError

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 CacheError

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 GroupInfoError

Available on crate feature std only.
Source§

impl Error for UnicodeWordBoundaryError

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 SmallIndexError

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 regex_automata::util::search::MatchError

Available on crate feature std only.
Source§

impl Error for PatternSetInsertError

Available on crate feature std only.
Source§

impl Error for regex_automata::util::wire::DeserializeError

Available on crate feature std only.
Source§

impl Error for SerializeError

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::hir::Error

Available on crate feature std only.
Source§

impl Error for CaseFoldError

Available on crate feature std only.
Source§

impl Error for UnicodeWordError

Available on crate feature std only.
Source§

impl Error for UnsupportedOperationError

Available on crate feature std only.
Source§

impl Error for OtherError

Available on crate feature std only.
Source§

impl Error for rustls_pki_types::server_name::AddrParseError

Available on crate feature std only.
Source§

impl Error for InvalidDnsNameError

Available on crate feature std only.
Source§

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

Available on crate feature std only.
Source§

impl Error for serde_json::error::Error

Source§

impl Error for ColorChoiceParseError

Source§

impl Error for ParseColorError

Source§

impl Error for Transport

1.0.0 · Source§

impl Error for JoinPathsError

1.11.0 · Source§

impl Error for gondola_core::prelude::fmt::Error

Source§

impl Error for UnorderedKeyError

1.57.0 · Source§

impl Error for alloc::collections::TryReserveError

1.58.0 · Source§

impl Error for FromVecWithNulError

1.7.0 · Source§

impl Error for IntoStringError

1.0.0 · Source§

impl Error for NulError

1.0.0 · Source§

impl Error for alloc::string::FromUtf8Error

1.0.0 · Source§

impl Error for FromUtf16Error

1.28.0 · Source§

impl Error for LayoutError

Source§

impl Error for AllocError

1.34.0 · Source§

impl Error for TryFromSliceError

1.13.0 · Source§

impl Error for BorrowError

1.13.0 · Source§

impl Error for BorrowMutError

1.34.0 · Source§

impl Error for CharTryFromError

1.20.0 · Source§

impl Error for ParseCharError

1.9.0 · Source§

impl Error for DecodeUtf16Error

1.59.0 · Source§

impl Error for TryFromCharError

1.69.0 · Source§

impl Error for FromBytesUntilNulError

1.4.0 · Source§

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

1.0.0 · Source§

impl Error for ParseFloatError

1.0.0 · Source§

impl Error for ParseIntError

1.34.0 · Source§

impl Error for TryFromIntError

1.0.0 · Source§

impl Error for ParseBoolError

1.0.0 · Source§

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

1.66.0 · Source§

impl Error for TryFromFloatSecsError

Source§

impl Error for NormalizeError

1.7.0 · Source§

impl Error for StripPrefixError

Source§

impl Error for ExitStatusError

1.0.0 · Source§

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

1.8.0 · Source§

impl Error for SystemTimeError

1.0.0 · Source§

impl Error for gondola_core::prelude::io::Error

1.56.0 · Source§

impl Error for WriterPanicked

1.26.0 · Source§

impl Error for AccessError

§

impl Error for DatetimeParseError

§

impl Error for Error

§

impl Error for Error

§

impl Error for Error

§

impl Error for Error

§

impl Error for GetDisjointMutError

§

impl Error for TemplateError

§

impl Error for TomlError

§

impl Error for TryReserveError

Source§

impl<'a, K, V> Error for alloc::collections::btree::map::entry::OccupiedError<'a, K, V>
where K: Debug + Ord, V: Debug,

Source§

impl<'a, K, V> Error for std::collections::hash::map::OccupiedError<'a, K, V>
where K: Debug, V: Debug,

1.51.0 · Source§

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

Source§

impl<A, S, V> Error for ConvertError<A, S, V>
where A: Display + Debug, S: Display + Debug, V: Display + Debug,

Available on non-no_zerocopy_core_error_1_81_0 or crate feature std only.
Source§

impl<E> Error for num_complex::ParseComplexError<E>
where E: Error,

Available on crate feature std only.
Source§

impl<E> Error for num_complex::ParseComplexError<E>
where E: Error,

Available on crate feature std only.
1.8.0 · Source§

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

§

impl<I> Error for InputError<I>
where I: Clone + Debug + Display + Sync + Send + 'static,

Available on crate feature std only.
§

impl<I, C> Error for TreeError<I, C>
where I: Debug + Display + Sync + Send + 'static, C: Display + Debug,

Available on crate feature std only.
Source§

impl<L, R> Error for Either<L, R>
where L: Error, R: Error,

Available on crate features std only.

Either implements Error if both L and R implement it.

Requires crate feature "std"

Source§

impl<Src, Dst> Error for AlignmentError<Src, Dst>
where Src: Deref, Dst: KnownLayout + ?Sized,

Available on non-no_zerocopy_core_error_1_81_0 or crate feature std only.
Source§

impl<Src, Dst> Error for SizeError<Src, Dst>
where Src: Deref, Dst: KnownLayout + ?Sized,

Available on non-no_zerocopy_core_error_1_81_0 or crate feature std only.
Source§

impl<Src, Dst> Error for ValidityError<Src, Dst>
where Dst: KnownLayout + TryFromBytes + ?Sized,

Available on non-no_zerocopy_core_error_1_81_0 or crate feature std only.
Source§

impl<T> Error for crossbeam_channel::err::SendTimeoutError<T>
where T: Send,

Source§

impl<T> Error for crossbeam_channel::err::TrySendError<T>
where T: Send,

Source§

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

1.0.0 · Source§

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

1.0.0 · Source§

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

Source§

impl<T> Error for crossbeam_channel::err::SendError<T>
where T: Send,

Source§

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

1.0.0 · Source§

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

1.0.0 · Source§

impl<T> Error for PoisonError<T>

1.52.0 · Source§

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

Source§

impl<W> Error for csv::error::IntoInnerError<W>
where W: Any,

1.0.0 · Source§

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