Trait i3status_rs::errors::StdError

1.0.0 · source ·
pub trait StdError: 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, demand: &mut Demand<'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");

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.

Provided Methods§

1.30.0 · source

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 {
    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"),
    }
}
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}");
}
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, demand: &mut Demand<'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 Demand::provide_value and Demand::provide_ref to extract references to member variables from dyn Error trait objects.

Example
#![feature(provide_any)]
#![feature(error_generic_member_access)]
use core::fmt;
use core::any::Demand;

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

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

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

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

impl std::error::Error for SourceError {}

#[derive(Debug)]
struct Error {
    source: SourceError,
    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, demand: &mut Demand<'a>) {
        demand
            .provide_ref::<MyBacktrace>(&self.backtrace)
            .provide_ref::<dyn std::error::Error + 'static>(&self.source);
    }
}

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

    assert!(core::ptr::eq(&error.backtrace, backtrace_ref));
}

Implementations§

source§

impl<'a> dyn Error + 'a

source

pub fn request_ref<T>(&'a self) -> Option<&'a T>where T: 'static + ?Sized,

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

Request a reference of type T as context about this error.

source

pub fn request_value<T>(&'a self) -> Option<T>where T: 'static,

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

Request a value of type T as context about this error.

source§

impl dyn Error + 'static

1.3.0 · source

pub fn is<T>(&self) -> boolwhere 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 + 'static

1.3.0 · source

pub fn is<T>(&self) -> boolwhere 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

pub fn request_ref<T>(&self) -> Option<&T>where T: 'static + ?Sized,

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

Request a reference of type T as context about this error.

source

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

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

Request a value of type T as context about this error.

source§

impl dyn Error + Send + Sync + 'static

1.3.0 · source

pub fn is<T>(&self) -> boolwhere 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

pub fn request_ref<T>(&self) -> Option<&T>where T: 'static + ?Sized,

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

Request a reference of type T as context about this error.

source

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

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

Request a value of type T as context about this error.

source§

impl dyn Error + 'static

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 + Send + 'static

1.3.0 · source

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

Attempts to downcast the box to a concrete type.

source§

impl dyn Error + 'static

1.3.0 · source

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

Attempts to downcast the box to a concrete type.

source§

impl dyn Error + Send + Sync + 'static

1.3.0 · source

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

Attempts to downcast the box to a concrete type.

Trait Implementations§

source§

impl Value for dyn Error + 'static

source§

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

Visits this value with the given Visitor.
source§

impl Value for dyn Error + Send + 'static

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 + 'static

source§

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

Visits this value with the given Visitor.
source§

impl Value for dyn Error + Sync + 'static

source§

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

Visits this value with the given Visitor.

Implementors§

source§

impl !Error for &str

1.8.0 · source§

impl Error for Infallible

source§

impl Error for VarError

1.15.0 · source§

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

source§

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

source§

impl Error for CalibrightError

source§

impl Error for RoundingError

source§

impl Error for crossbeam_channel::err::RecvTimeoutError

source§

impl Error for crossbeam_channel::err::TryRecvError

source§

impl Error for FromHexError

source§

impl Error for Code

source§

impl Error for MailEntryError

source§

impl Error for MaildirError

source§

impl Error for DeError

source§

impl Error for SerError

source§

impl Error for WrappedError

source§

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

source§

impl Error for notmuch::error::Error

source§

impl Error for Status

source§

impl Error for regex::error::Error

source§

impl Error for LibsensorsError

source§

impl Error for TryAcquireError

source§

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

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 url::parser::ParseError

source§

impl Error for ConnectError

source§

impl Error for BindError

source§

impl Error for zbus::error::Error

source§

impl Error for zbus::fdo::Error

source§

impl Error for BernoulliError

source§

impl Error for WeightedError

source§

impl Error for !

1.57.0 · source§

impl Error for TryReserveError

1.58.0 · source§

impl Error for FromVecWithNulError

1.7.0 · source§

impl Error for IntoStringError

source§

impl Error for NulError

source§

impl Error for FromUtf8Error

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.17.0 · source§

impl Error for FromBytesWithNulError

1.11.0 · source§

impl Error for core::fmt::Error

1.4.0 · source§

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

source§

impl Error for ParseFloatError

source§

impl Error for ParseIntError

1.34.0 · source§

impl Error for TryFromIntError

source§

impl Error for ParseBoolError

source§

impl Error for Utf8Error

1.66.0 · source§

impl Error for TryFromFloatSecsError

source§

impl Error for JoinPathsError

1.56.0 · source§

impl Error for WriterPanicked

source§

impl Error for std::io::error::Error

1.7.0 · source§

impl Error for StripPrefixError

source§

impl Error for ExitStatusError

source§

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

1.26.0 · source§

impl Error for AccessError

1.8.0 · source§

impl Error for SystemTimeError

source§

impl Error for chrono::format::ParseError

source§

impl Error for OutOfRangeError

source§

impl Error for ParseWeekdayError

source§

impl Error for crossbeam_channel::err::RecvError

source§

impl Error for SelectTimeoutError

source§

impl Error for TrySelectError

source§

impl Error for getrandom::error::Error

source§

impl Error for h2::error::Error

source§

impl Error for LengthLimitError

source§

impl Error for http::error::Error

source§

impl Error for InvalidHeaderName

source§

impl Error for InvalidHeaderValue

source§

impl Error for ToStrError

source§

impl Error for InvalidMethod

source§

impl Error for InvalidStatusCode

source§

impl Error for InvalidUri

source§

impl Error for InvalidUriParts

source§

impl Error for InvalidNameError

source§

impl Error for hyper::error::Error

source§

impl Error for PrefixLenError

source§

impl Error for ipnet::parser::AddrParseError

source§

impl Error for PAErr

source§

impl Error for libpulse_binding::version::Error

source§

impl Error for log::ParseLevelError

source§

impl Error for SetLoggerError

source§

impl Error for FromStrError

source§

impl Error for native_tls::Error

source§

impl Error for ClearEnvError

source§

impl Error for openssl::error::Error

source§

impl Error for ErrorStack

source§

impl Error for openssl::ssl::error::Error

source§

impl Error for X509VerifyResult

source§

impl Error for reqwest::error::Error

source§

impl Error for serde::de::value::Error

source§

impl Error for serde_json::error::Error

source§

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

source§

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

source§

impl Error for TryCurrentError

source§

impl Error for JoinError

source§

impl Error for AcquireError

source§

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

source§

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

source§

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

source§

impl Error for Elapsed

source§

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

source§

impl Error for toml::de::Error

source§

impl Error for toml::ser::Error

source§

impl Error for SetGlobalDefaultError

source§

impl Error for tracing_core::metadata::ParseLevelError

source§

impl Error for ParseLevelFilterError

source§

impl Error for ReadError

source§

impl Error for rand_core::error::Error

source§

impl Error for BoxErrorWrapper

source§

impl Error for i3status_rs::errors::Error

§

impl Error for Aborted

§

impl Error for AnyDelimiterCodecError

§

impl Error for BuildError

§

impl Error for Canceled

§

impl Error for CaseFoldError

§

impl Error for DatetimeParseError

§

impl Error for DecodeError

§

impl Error for DecodeError

§

impl Error for DecodeError

§

impl Error for DecodeSliceError

§

impl Error for EncodeSliceError

§

impl Error for EnterError

§

impl Error for Errno

§

impl Error for Error

§

impl Error for Error

§

impl Error for Error

§

impl Error for Error

§

impl Error for Error

§

impl Error for Error

§

impl Error for Error

§

impl Error for Error

§

impl Error for Error

§

impl Error for Error

§

impl Error for Error

§

impl Error for Error

§

impl Error for Errors

§

impl Error for GetTimezoneError

§

impl Error for InvalidBufferSize

§

impl Error for InvalidLength

§

impl Error for InvalidOutputSize

§

impl Error for LengthDelimitedCodecError

§

impl Error for LinesCodecError

§

impl Error for MailParseError

§

impl Error for MatchError

§

impl Error for MatchesError

§

impl Error for ParseAlphabetError

§

impl Error for PatternIDError

§

impl Error for PopError

§

impl Error for QuotedPrintableError

§

impl Error for RecvError

§

impl Error for SendError

§

impl Error for SpawnError

§

impl Error for SpecificationError

§

impl Error for StateIDError

§

impl Error for TomlError

§

impl Error for TryRecvError

§

impl Error for TryRecvError

§

impl Error for UnicodeWordError

source§

impl<'a, K, V> Error for alloc::collections::btree::map::entry::OccupiedError<'a, K, V, Global>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 Twhere T: Error + ?Sized,

source§

impl<E> Error for Err<E>where E: Debug,

source§

impl<E> Error for LookupError<E>where E: Error + 'static,

§

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

source§

impl<I> Error for nom::error::Error<I>where I: Debug + Display,

source§

impl<I> Error for nom::error::VerboseError<I>where I: Debug + Display,

§

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

§

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

source§

impl<S> Error for native_tls::HandshakeError<S>where S: Any + Debug,

source§

impl<S> Error for openssl::ssl::error::HandshakeError<S>where S: Debug,

source§

impl<T> Error for std::sync::mpsc::TrySendError<T>where T: Send,

source§

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

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 tokio::sync::mpsc::error::SendTimeoutError<T>where T: Debug,

source§

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

source§

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

1.8.0 · source§

impl<T> Error for Box<T, Global>where T: Error,

source§

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

1.52.0 · source§

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

source§

impl<T> Error for std::sync::mpsc::SendError<T>where T: Send,

source§

impl<T> Error for PoisonError<T>

source§

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

source§

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

source§

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

source§

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

§

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

§

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

§

impl<T> Error for ReuniteError<T>where T: Any,

§

impl<T> Error for SendError<T>

§

impl<T> Error for TrySendError<T>

§

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

§

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

§

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

source§

impl<T, P> Error for NlError<T, P>where T: Debug, P: Debug,

source§

impl<T, P> Error for Nlmsgerr<T, P>where T: Debug, P: Debug,

source§

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

source§

impl<const N: usize> Error for GetManyMutError<N>