Struct Err

Source
pub struct Err {
    pub file: &'static str,
    pub line: u32,
    /* private fields */
}
Expand description

Is the struct that represents an error with a reason.

This struct encapsulates the reason for the error, which can be any data type. Typically, the reason is an enum variant, which makes it easy to uniquely identify the error kind and location in the source code. In addition, since an enum variant can store additional information as their fields, it is possible to provide more detailed information about the error.

The reason for the error can be distinguished with match statements, and type casting, so it is easy to handle the error in a type-safe manner.

This struct also contains an optional cause error, which is the error caused the current error. This is useful for chaining errors.

This struct is implements the std::errors::Error trait, so it can be used as an common error type in Rust programs.

Fields§

§file: &'static str

The name of the source file where the error occurred.

§line: u32

The line number in the source file where the error occurred.

Implementations§

Source§

impl Err

Source

pub fn new<R>(reason: R) -> Self
where R: Debug + Send + Sync + 'static,

Creates a new Err instance with the given reason.

The reason can be of any type, but typically it is an enum variant that uniquely identifies the error’s nature.

§Parameters
  • reason: The reason for the error.
§Returns

A new Err instance containing the given reason.

use errs::Err;

#[derive(Debug)]
enum Reasons {
    IllegalState { state: String },
}

let err = Err::new(Reasons::IllegalState { state: "bad state".to_string() });
Source

pub fn with_source<R, E>(reason: R, source: E) -> Self
where R: Debug + Send + Sync + 'static, E: Error + Send + Sync + 'static,

Creates a new Err instance with the give reason and underlying source error.

This constructor is useful when the error is caused by another error.

§Parameters
  • reason: The reason for the error.
  • source: The underlying source error that caused the error.
§Returns

A new Err instance containing the given reason and source error.

use errs::Err;
use std::io;

#[derive(Debug)]
enum Reasons {
    FailToDoSomething,
}

let io_error = io::Error::other("oh no!");

let err = Err::with_source(Reasons::FailToDoSomething, io_error);
Source

pub fn reason<R>(&self) -> Result<&R, &Self>
where R: Debug + Send + Sync + 'static,

Attempts to retrieve the error’s reason as a specific type.

This method checks whether the stored reason matches the specified type and returns a reference to the reason if the type matches.

§Parameters
  • R: The expected type of the reason.
§Returns
  • Ok(&R): A reference to the reason if it is of the specified type.
  • Err(&self): A reference to this Err itself if the reason is not of the specified type.
use errs::Err;

#[derive(Debug)]
enum Reasons {
    IllegalState { state: String },
}

let err = Err::new(Reasons::IllegalState { state: "bad state".to_string() });
match err.reason::<Reasons>() {
  Ok(r) => match r {
    Reasons::IllegalState { state } => println!("state = {state}"),
    _ => { /* ... */ }
  }
  Err(err) => match err.reason::<String>() {
     Ok(s) => println!("string reason = {s}"),
     Err(_err) => { /* ... */ }
  }
}
Source

pub fn match_reason<R>(&self, func: fn(&R)) -> &Self
where R: Debug + Send + Sync + 'static,

Executes a function if the error’s reason matches a specific type.

This method allows you to perform actions based on the type of the error’s reason. If the reason matches the expected type, the provided function is called with a reference to the reason.

§Parameters
  • R: The expected type of the reason.
  • func: The function to execute if the reason matches the type.
§Returns

A reference to the current Err instance.

use errs::Err;

#[derive(Debug)]
enum Reasons {
    IllegalState { state: String },
}

let err = Err::new(Reasons::IllegalState { state: "bad state".to_string() });
err.match_reason::<Reasons>(|r| match r {
    Reasons::IllegalState { state } => println!("state = {state}"),
    _ => { /* ... */ }
})
.match_reason::<String>(|s| {
    println!("string reason = {s}");
});

Trait Implementations§

Source§

impl Debug for Err

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for Err

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Drop for Err

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl Error for Err

Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
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. Read more
Source§

impl Send for Err

Source§

impl Sync for Err

Auto Trait Implementations§

§

impl Freeze for Err

§

impl !RefUnwindSafe for Err

§

impl Unpin for Err

§

impl !UnwindSafe for Err

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.