Struct Err

Source
pub struct Err { /* private fields */ }
Expand description

The error type used within the Sabi framework.

It holds a value of any type that represents the reason for the error. By the reason, it is possible to identify the error or retrieve the detailed information about the error.

Implementations§

Source§

impl Err

Source

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

Creates a new error with the value reprenents the reason.

use sabi::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 error with the value reprenents the reason and the source error that causes this error.

use sabi::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 is_reason<R>(&self) -> bool
where R: Debug + Send + Sync + 'static,

Checks if R is the type of the reason held by this error object.

use sabi::Err;

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

let err = Err::new(Reasons::IllegalState { state: "bad state".to_string() });
assert!(err.is_reason::<Reasons>());
assert!(err.is_reason::<String>() == false);
Source

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

Gets the reason value if the type of the reason is R.

use sabi::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,

Checks the type of the reason held by this object, and if it matches, executes the provided function.

use sabi::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

Auto Trait Implementations§

§

impl Freeze for Err

§

impl !RefUnwindSafe for Err

§

impl !Send for Err

§

impl !Sync 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.