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 · Sourcefn source(&self) -> Option<&(dyn Error + 'static)>
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 · Sourcefn description(&self) -> &str
👎Deprecated since 1.42.0: use the Display impl or to_string()
fn description(&self) -> &str
if let Err(e) = "xc".parse::<u32>() {
// Print `e` itself, no need for description().
eprintln!("Error: {e}");
}fn cause(&self) -> Option<&dyn Error>
Sourcefn provide<'a>(&'a self, request: &mut Request<'a>)
🔬This is a nightly-only experimental API. (error_generic_member_access)
fn provide<'a>(&'a self, request: &mut Request<'a>)
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
impl dyn Error
1.3.0 · Sourcepub fn is<T>(&self) -> boolwhere
T: Error + 'static,
pub fn is<T>(&self) -> boolwhere
T: Error + 'static,
Returns true if the inner type is the same as T.
1.3.0 · Sourcepub fn downcast_ref<T>(&self) -> Option<&T>where
T: Error + 'static,
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 · Sourcepub fn downcast_mut<T>(&mut self) -> Option<&mut T>where
T: Error + 'static,
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
impl dyn Error + Send
1.3.0 · Sourcepub fn is<T>(&self) -> boolwhere
T: Error + 'static,
pub fn is<T>(&self) -> boolwhere
T: Error + 'static,
Forwards to the method defined on the type dyn Error.
1.3.0 · Sourcepub fn downcast_ref<T>(&self) -> Option<&T>where
T: Error + 'static,
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 · Sourcepub fn downcast_mut<T>(&mut self) -> Option<&mut T>where
T: Error + 'static,
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 + Sync + Send
impl dyn Error + Sync + Send
1.3.0 · Sourcepub fn is<T>(&self) -> boolwhere
T: Error + 'static,
pub fn is<T>(&self) -> boolwhere
T: Error + 'static,
Forwards to the method defined on the type dyn Error.
1.3.0 · Sourcepub fn downcast_ref<T>(&self) -> Option<&T>where
T: Error + 'static,
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 · Sourcepub fn downcast_mut<T>(&mut self) -> Option<&mut T>where
T: Error + 'static,
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
impl dyn Error
Sourcepub fn sources(&self) -> Source<'_> ⓘ
🔬This is a nightly-only experimental API. (error_iter)
pub fn sources(&self) -> Source<'_> ⓘ
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());Trait Implementations§
impl Trait for dyn Error + Send
impl Trait for dyn Error + Sync + Send
impl Trait for dyn Error + Sync
Implementors§
impl !Error for &str
impl Error for VarError
impl Error for artifact_app::dev_prefix::fs::TryLockError
impl Error for Infallible
impl Error for FromBytesWithNulError
impl Error for core::slice::GetDisjointMutError
impl Error for std::sync::mpsc::RecvTimeoutError
impl Error for std::sync::mpsc::TryRecvError
impl Error for base64::decode::DecodeError
impl Error for base64::decode::DecodeError
impl Error for cookie::parse::ParseError
impl Error for cookie_store::cookie::Error
impl Error for crossbeam_channel::err::RecvTimeoutError
impl Error for crossbeam_channel::err::TryRecvError
impl Error for ctrlc::error::Error
impl Error for InitError
impl Error for httparse::Error
std only.impl Error for hyper_old_types::error::Error
impl Error for hyper::error::Error
impl Error for icu_collections::codepointtrie::error::Error
impl Error for icu_locale_core::parser::errors::ParseError
impl Error for PreferencesParseError
impl Error for language_tags::Error
impl Error for mustache::encoder::Error
impl Error for mustache::error::Error
impl Error for mustache::parser_internals::Error
impl Error for BodyError
impl Error for nix::errno::consts::Errno
impl Error for WeightedError
std only.impl Error for rand::jitter::TimerError
std only.impl Error for rand_jitter::error::TimerError
std only.impl Error for StartError
std only.impl Error for regex_syntax::error::Error
impl Error for regex_syntax::error::Error
std only.impl Error for regex::error::Error
impl Error for regex::error::Error
std only.impl Error for FromBase64Error
impl Error for FromHexError
impl Error for DecoderError
impl Error for EncoderError
impl Error for ParserError
impl Error for self_update::errors::Error
impl Error for SemVerError
impl Error for ReqParseError
impl Error for serde_urlencoded::ser::Error
impl Error for slab::GetDisjointMutError
std only.impl Error for FmtError
impl Error for time::ParseError
impl Error for tinystr::error::ParseError
impl Error for toml::ser::Error
impl Error for TryFromIntToCharError
impl Error for try_from::int::TryFromIntError
impl Error for url::parser::ParseError
impl Error for url::parser::ParseError
std only.impl Error for uuid::Error
impl Error for uuid::ParseError
impl Error for uuid::parser::ParseError
impl Error for ZeroTrieBuildError
impl Error for UleError
impl Error for !
impl Error for artifact_app::types::Error
impl Error for JoinPathsError
impl Error for artifact_app::dev_prefix::fmt::Error
impl Error for artifact_app::dev_prefix::io::Error
impl Error for WriterPanicked
impl Error for ParseBoolError
impl Error for Utf8Error
impl Error for UnorderedKeyError
impl Error for TryReserveError
impl Error for FromVecWithNulError
impl Error for IntoStringError
impl Error for NulError
impl Error for FromUtf8Error
impl Error for FromUtf16Error
impl Error for LayoutError
impl Error for AllocError
impl Error for TryFromSliceError
impl Error for BorrowError
impl Error for BorrowMutError
impl Error for CharTryFromError
impl Error for ParseCharError
impl Error for DecodeUtf16Error
impl Error for TryFromCharError
impl Error for FromBytesUntilNulError
impl Error for AddrParseError
impl Error for ParseFloatError
impl Error for ParseIntError
impl Error for core::num::error::TryFromIntError
impl Error for TryFromFloatSecsError
impl Error for NormalizeError
impl Error for StripPrefixError
impl Error for ExitStatusError
impl Error for std::sync::mpsc::RecvError
impl Error for AccessError
impl Error for SystemTimeError
impl Error for aho_corasick::util::error::BuildError
std only.impl Error for aho_corasick::util::error::MatchError
std only.impl Error for aho_corasick::util::primitives::PatternIDError
std only.impl Error for aho_corasick::util::primitives::StateIDError
std only.impl Error for bitflags::parser::ParseError
std only.impl Error for clap::errors::Error
impl Error for crossbeam_channel::err::RecvError
impl Error for SelectTimeoutError
impl Error for TrySelectError
impl Error for error_chain::example_generated::inner::Error
impl Error for error_chain::example_generated::Error
impl Error for CompressError
impl Error for DecompressError
impl Error for Canceled
impl Error for h2::error::Error
impl Error for http::error::Error
impl Error for InvalidHeaderName
impl Error for InvalidHeaderNameBytes
impl Error for InvalidHeaderValue
impl Error for InvalidHeaderValueBytes
impl Error for ToStrError
impl Error for InvalidMethod
impl Error for InvalidStatusCode
impl Error for InvalidUri
impl Error for InvalidUriBytes
impl Error for InvalidUriParts
impl Error for UriError
impl Error for InvalidNameError
impl Error for hyper::error::Error
impl Error for DataError
impl Error for idna::Errors
std only.impl Error for idna::uts46::Errors
impl Error for ParseLevelError
std only.impl Error for log::SetLoggerError
use_std only.impl Error for log::SetLoggerError
std only.impl Error for ShutdownLoggerError
use_std only.impl Error for FromStrError
impl Error for native_tls::Error
impl Error for object::read::Error
std and core_error only.impl Error for openssl::error::Error
impl Error for ErrorStack
impl Error for openssl::ssl::error::Error
impl Error for X509VerifyResult
impl Error for publicsuffix::errors::Error
impl Error for rand_core::error::Error
std only.impl Error for regex_automata::dfa::onepass::BuildError
std only.impl Error for regex_automata::hybrid::error::BuildError
std only.impl Error for CacheError
std only.impl Error for regex_automata::meta::error::BuildError
std only.impl Error for regex_automata::nfa::thompson::error::BuildError
std only.impl Error for GroupInfoError
std only.impl Error for UnicodeWordBoundaryError
std only.impl Error for regex_automata::util::primitives::PatternIDError
std only.impl Error for SmallIndexError
std only.impl Error for regex_automata::util::primitives::StateIDError
std only.impl Error for regex_automata::util::search::MatchError
std only.impl Error for PatternSetInsertError
std only.impl Error for DeserializeError
std only.impl Error for SerializeError
std only.impl Error for regex_syntax::ast::Error
impl Error for regex_syntax::ast::Error
std only.impl Error for regex_syntax::hir::Error
impl Error for regex_syntax::hir::Error
std only.impl Error for CaseFoldError
std only.impl Error for UnicodeWordError
std only.impl Error for CookieParseError
impl Error for reqwest::error::Error
impl Error for rustix::backend::io::errno::Errno
std or error_in_core only.impl Error for serde_core::de::value::Error
std only.impl Error for serde_json::error::Error
impl Error for OutOfRangeError
impl Error for CollectBytesError
impl Error for CollectVecError
impl Error for RunError
impl Error for RunTimeoutError
impl Error for TurnError
impl Error for EnterError
impl Error for SpawnError
impl Error for SetFallbackError
impl Error for tokio_sync::mpsc::bounded::RecvError
impl Error for tokio_sync::mpsc::bounded::SendError
impl Error for UnboundedRecvError
impl Error for UnboundedSendError
impl Error for tokio_sync::oneshot::error::RecvError
impl Error for tokio_sync::oneshot::error::TryRecvError
impl Error for AcquireError
impl Error for TryAcquireError
impl Error for tokio_sync::watch::error::RecvError
impl Error for BlockingError
impl Error for ParkError
impl Error for tokio_timer::error::Error
impl Error for DatetimeParseError
impl Error for toml::de::Error
impl Error for BytesError
impl Error for UnsupportedPlatformError
impl<'a, K, V> Error for alloc::collections::btree::map::entry::OccupiedError<'a, K, V>
impl<'a, K, V> Error for std::collections::hash::map::OccupiedError<'a, K, V>
impl<'a, T> Error for &'a T
impl<E> Error for Box<E>where
E: Error,
impl<E> Error for Compat<E>
std only.impl<L, R> Error for Either<L, R>
std only.Either implements Error if both L and R implement it.
Requires crate feature "std"