Trait peroxide::structure::matrix::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");

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"),
    }
}
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)]
#![feature(error_in_core)]
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 + Sync + 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

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

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

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 + Sync + Send

1.3.0 · source

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

Attempts to downcast the box to a concrete type.

Implementors§

1.0.0 · source§

impl !Error for &str

1.8.0 · source§

impl Error for Infallible

1.0.0 · source§

impl Error for VarError

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 RoundingError

source§

impl Error for BernoulliError

source§

impl Error for WeightedError

source§

impl Error for rand_distr::binomial::Error

source§

impl Error for rand_distr::cauchy::Error

source§

impl Error for rand_distr::dirichlet::Error

source§

impl Error for rand_distr::exponential::Error

source§

impl Error for rand_distr::frechet::Error

source§

impl Error for BetaError

source§

impl Error for ChiSquaredError

source§

impl Error for rand_distr::gamma::Error

source§

impl Error for FisherFError

source§

impl Error for rand_distr::geometric::Error

source§

impl Error for rand_distr::gumbel::Error

source§

impl Error for rand_distr::hypergeometric::Error

source§

impl Error for rand_distr::inverse_gaussian::Error

source§

impl Error for rand_distr::normal::Error

source§

impl Error for rand_distr::normal_inverse_gaussian::Error

source§

impl Error for rand_distr::pareto::Error

source§

impl Error for PertError

source§

impl Error for rand_distr::poisson::Error

source§

impl Error for rand_distr::skew_normal::Error

source§

impl Error for TriangularError

source§

impl Error for rand_distr::weibull::Error

source§

impl Error for ZetaError

source§

impl Error for ZipfError

source§

impl Error for !

source§

impl Error for UnorderedKeyError

1.57.0 · source§

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

impl Error for FromBytesWithNulError

1.11.0 · source§

impl Error for core::fmt::Error

1.4.0 · source§

impl Error for 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

1.0.0 · source§

impl Error for JoinPathsError

1.56.0 · source§

impl Error for WriterPanicked

1.0.0 · source§

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

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

impl Error for AccessError

1.8.0 · source§

impl Error for SystemTimeError

source§

impl Error for ParseError

source§

impl Error for ParseMonthError

source§

impl Error for OutOfRange

source§

impl Error for OutOfRangeError

source§

impl Error for ParseWeekdayError

source§

impl Error for CompressError

source§

impl Error for DecompressError

source§

impl Error for getrandom::error::Error

source§

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

source§

impl Error for ReadError

source§

impl Error for rand_core::error::Error

§

impl Error for Aborted

§

impl Error for Canceled

§

impl Error for CancelledError

§

impl Error for DecodeError

§

impl Error for DecodeSliceError

§

impl Error for DeserializeError

§

impl Error for DowncastError<'_, '_>

§

impl Error for DowncastIntoError<'_>

§

impl Error for EncodeSliceError

§

impl Error for EnterError

§

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 ErrorKind

§

impl Error for FromUtf8Error

§

impl Error for IncompleteReadError

§

impl Error for InvalidStateError

§

impl Error for LZ4Error

§

impl Error for LimitOverrunError

§

impl Error for PanicException

§

impl Error for ParseAlphabetError

§

impl Error for PyArithmeticError

§

impl Error for PyAssertionError

§

impl Error for PyAttributeError

§

impl Error for PyBaseException

§

impl Error for PyBaseExceptionGroup

§

impl Error for PyBlockingIOError

§

impl Error for PyBrokenPipeError

§

impl Error for PyBufferError

§

impl Error for PyBytesWarning

§

impl Error for PyChildProcessError

§

impl Error for PyConnectionAbortedError

§

impl Error for PyConnectionError

§

impl Error for PyConnectionRefusedError

§

impl Error for PyConnectionResetError

§

impl Error for PyDeprecationWarning

§

impl Error for PyEOFError

§

impl Error for PyEncodingWarning

§

impl Error for PyEnvironmentError

§

impl Error for PyErr

§

impl Error for PyException

§

impl Error for PyFileExistsError

§

impl Error for PyFileNotFoundError

§

impl Error for PyFloatingPointError

§

impl Error for PyFutureWarning

§

impl Error for PyGeneratorExit

§

impl Error for PyIOError

§

impl Error for PyImportError

§

impl Error for PyImportWarning

§

impl Error for PyIndexError

§

impl Error for PyInterruptedError

§

impl Error for PyIsADirectoryError

§

impl Error for PyKeyError

§

impl Error for PyKeyboardInterrupt

§

impl Error for PyLookupError

§

impl Error for PyMemoryError

§

impl Error for PyModuleNotFoundError

§

impl Error for PyNameError

§

impl Error for PyNotADirectoryError

§

impl Error for PyNotImplementedError

§

impl Error for PyOSError

§

impl Error for PyOverflowError

§

impl Error for PyPendingDeprecationWarning

§

impl Error for PyPermissionError

§

impl Error for PyProcessLookupError

§

impl Error for PyRecursionError

§

impl Error for PyReferenceError

§

impl Error for PyResourceWarning

§

impl Error for PyRuntimeError

§

impl Error for PyRuntimeWarning

§

impl Error for PyStopAsyncIteration

§

impl Error for PyStopIteration

§

impl Error for PySyntaxError

§

impl Error for PySyntaxWarning

§

impl Error for PySystemError

§

impl Error for PySystemExit

§

impl Error for PyTimeoutError

§

impl Error for PyTypeError

§

impl Error for PyUnboundLocalError

§

impl Error for PyUnicodeDecodeError

§

impl Error for PyUnicodeEncodeError

§

impl Error for PyUnicodeError

§

impl Error for PyUnicodeTranslateError

§

impl Error for PyUnicodeWarning

§

impl Error for PyUserWarning

§

impl Error for PyValueError

§

impl Error for PyWarning

§

impl Error for PyZeroDivisionError

§

impl Error for QueueEmpty

§

impl Error for QueueFull

§

impl Error for RecvError

§

impl Error for RecvTimeoutError

§

impl Error for SelectTimeoutError

§

impl Error for SendError

§

impl Error for SpawnError

§

impl Error for TimeoutError

§

impl Error for TryRecvError

§

impl Error for TryRecvError

§

impl Error for TrySelectError

§

impl Error for UnknownEnumTag

§

impl Error for UnknownEnumTagKind

§

impl Error for Utf8Error

§

impl Error for Utf8Error

§

impl Error for Utf8Error

§

impl Error for gaierror

§

impl Error for herror

§

impl Error for timeout

§

impl<'a> Error for PyDowncastError<'a>

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<E> Error for ParseComplexError<E>
where E: Error,

source§

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

Either implements Error if both L and R implement it.

Requires crate feature "use_std"

1.0.0 · source§

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

1.0.0 · source§

impl<T> Error for TryLockError<T>

1.8.0 · source§

impl<T> Error for Box<T>
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,

1.0.0 · source§

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

1.0.0 · source§

impl<T> Error for PoisonError<T>

§

impl<T> Error for Py<T>
where T: Error + PyTypeInfo, <T as HasPyGilRef>::AsRefTarget: Display,

Py<T> can be used as an error when T is an Error.

However for GIL lifetime reasons, cause() cannot be implemented for Py<T>. Use .as_ref() to get the GIL-scoped error if you need to inspect the cause.

§

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

§

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

§

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

§

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

§

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

§

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

§

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

§

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

1.0.0 · source§

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

§

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

§

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

source§

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