pub trait Error: Debug + Display {
// Provided methods
fn source(&self) -> Option<&(dyn Error + 'static)> { ... }
fn description(&self) -> &str { ... }
fn cause(&self) -> Option<&dyn Error> { ... }
}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, and may provide
cause chain information:
The source method 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 access to that error via the
source method. This makes it possible for the high-level module to
provide its own errors while also revealing some of the implementation for
debugging via source chains.
Provided Methods§
Sourcefn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
The lower-level source of this error, if any.
§Examples
use std::error::Error;
use std::fmt;
#[derive(Debug)]
struct SuperError {
side: 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.side)
}
}
#[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 { side: SuperErrorSideKick })
}
fn main() {
match get_super_error() {
Err(e) => {
println!("Error: {}", e);
println!("Caused by: {}", e.source().unwrap());
}
_ => println!("No error"),
}
}Sourcefn description(&self) -> &str
👎Deprecated since 1.42.0: use Display
fn description(&self) -> &str
Displayif let Err(e) = "xc".parse::<u32>() {
// Print `e` itself, no need for description().
eprintln!("Error: {}", e);
}fn cause(&self) -> Option<&dyn Error>
👎Deprecated since 1.33.0: obsoleted by Error::source, which can support downcasting