[][src]Struct trackable::error::TrackableError

pub struct TrackableError<K> { /* fields omitted */ }

Trackable error.

Examples

Defines your own Error type.

#[macro_use]
extern crate trackable;
use trackable::error::{TrackableError, ErrorKind, ErrorKindExt};

#[derive(Debug, TrackableError)]
#[trackable(error_kind = "MyErrorKind")]
struct MyError(TrackableError<MyErrorKind>);
impl From<std::io::Error> for MyError {
    fn from(f: std::io::Error) -> Self {
        // Any I/O errors are considered critical
        MyErrorKind::Critical.cause(f).into()
    }
}

#[derive(Debug, PartialEq, Eq)]
enum MyErrorKind {
    Critical,
    NonCritical,
}
impl ErrorKind for MyErrorKind {}

fn main() {
    // Tracks an error
    let error: MyError = MyErrorKind::Critical.cause("something wrong").into();
    let error = track!(error);
    let error = track!(error, "I passed here");
    assert_eq!(format!("\nError: {}", error).replace('\\', "/"), r#"
Error: Critical (cause; something wrong)
HISTORY:
  [0] at src/error.rs:27
  [1] at src/error.rs:28 -- I passed here
"#);

    // Tries to execute I/O operation
    let result = (|| -> Result<_, MyError> {
        let f = track!(std::fs::File::open("/path/to/non_existent_file")
                       .map_err(MyError::from))?;
        Ok(f)
    })();
    let error = result.err().unwrap();
    let cause = error.concrete_cause::<std::io::Error>().unwrap();
    assert_eq!(cause.kind(), std::io::ErrorKind::NotFound);
}

TrackableError is cloneable if K is so.

#[macro_use]
extern crate trackable;

use trackable::Trackable;
use trackable::error::{Failed, ErrorKindExt};

fn main() {
    let mut original = Failed.error();

    let original = track!(original, "Hello `original`!");
    let forked = original.clone();
    let forked = track!(forked, "Hello `forked`!");

    assert_eq!(format!("\n{}", original).replace('\\', "/"), r#"
Failed
HISTORY:
  [0] at src/error.rs:11 -- Hello `original`!
"#);

    assert_eq!(format!("\n{}", forked).replace('\\', "/"), r#"
Failed
HISTORY:
  [0] at src/error.rs:11 -- Hello `original`!
  [1] at src/error.rs:13 -- Hello `forked`!
"#);
}

Methods

impl<K: ErrorKind> TrackableError<K>[src]

pub fn new<E>(kind: K, cause: E) -> Self where
    E: Into<BoxError>, 
[src]

Makes a new TrackableError instance.

pub fn kind(&self) -> &K[src]

Returns the kind of this error.

pub fn concrete_cause<T>(&self) -> Option<&T> where
    T: Error + 'static, 
[src]

Tries to return the cause of this error as a value of T type.

If neither this error has a cause nor it is an T value, this method will return None.

Trait Implementations

impl<K> Trackable for TrackableError<K>[src]

type Event = Location

Event type which a history of an instance of this type can have.

fn track<F>(&mut self, f: F) where
    F: FnOnce() -> Self::Event
[src]

Add an event into the tail of the history of this instance. Read more

fn in_tracking(&self) -> bool[src]

Returns true if it is being tracked, otherwise false.

impl From<TrackableError<Failed>> for Failure[src]

impl From<Failure> for TrackableError<Failed>[src]

impl From<TrackableError<ErrorKind>> for IoError[src]

impl From<IoError> for TrackableError<ErrorKind>[src]

impl<K: ErrorKind> From<K> for TrackableError<K>[src]

impl<K: ErrorKind + Default> Default for TrackableError<K>[src]

impl<K: Clone> Clone for TrackableError<K>[src]

fn clone_from(&mut self, source: &Self)1.0.0[src]

Performs copy-assignment from source. Read more

impl<K: Debug> Debug for TrackableError<K>[src]

impl<K: ErrorKind> Display for TrackableError<K>[src]

impl<K: ErrorKind> Error for TrackableError<K>[src]

fn source(&self) -> Option<&(dyn Error + 'static)>1.30.0[src]

The lower-level source of this error, if any. Read more

impl<K> Serialize for TrackableError<K> where
    K: Serialize
[src]

impl<'de, K> Deserialize<'de> for TrackableError<K> where
    K: Deserialize<'de>, 
[src]

Auto Trait Implementations

impl<K> Unpin for TrackableError<K> where
    K: Unpin

impl<K> Send for TrackableError<K> where
    K: Send

impl<K> Sync for TrackableError<K> where
    K: Sync

impl<K> !RefUnwindSafe for TrackableError<K>

impl<K> !UnwindSafe for TrackableError<K>

Blanket Implementations

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> DeserializeOwned for T where
    T: Deserialize<'de>, 
[src]