pub struct TrackableError<K> { /* fields omitted */ }
Trackable error.
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 {
MyErrorKind::Critical.cause(f).into()
}
}
#[derive(Debug, PartialEq, Eq)]
enum MyErrorKind {
Critical,
NonCritical,
}
impl ErrorKind for MyErrorKind {}
fn main() {
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
"#);
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`!
"#);
}
Makes a new TrackableError
instance.
Returns the kind of this error.
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
.
Event type which a history of an instance of this type can have.
Returns the reference of the tracking history of this instance. Read more
Returns the mutable reference of the tracking history of this instance. Read more
Add an event into the tail of the history of this instance. Read more
Returns true
if it is being tracked, otherwise false
.
Performs copy-assignment from source
. Read more
Returns the "default value" for a type. Read more
Formats the value using the given formatter. Read more
Formats the value using the given formatter. Read more
Deprecated since 1.33.0:
replaced by Error::source, which can support downcasting
The lower-level cause of this error, if any. Read more
The lower-level source of this error, if any. Read more
Serialize this value into the given Serde serializer. Read more
Deserialize this value from the given Serde deserializer. Read more
Converts the given value to a String
. Read more
Creates owned data from borrowed data, usually by cloning. Read more
🔬 This is a nightly-only experimental API. (toowned_clone_into
)
recently added
Uses borrowed data to replace owned data, usually by cloning. Read more
🔬 This is a nightly-only experimental API. (try_from
)
The type returned in the event of a conversion error.
🔬 This is a nightly-only experimental API. (try_from
)
Immutably borrows from an owned value. Read more
🔬 This is a nightly-only experimental API. (get_type_id
)
this method will likely be replaced by an associated static
Mutably borrows from an owned value. Read more
🔬 This is a nightly-only experimental API. (try_from
)
The type returned in the event of a conversion error.
🔬 This is a nightly-only experimental API. (try_from
)