Expand description
§pretty-error-debug
Display a the chain of an error. Most useful as Result<(), E>
for your fn main()
,
and in conjunction with thiserror
.
This crate simply plagiarized extracted all the relevant formatting code from
anyhow
.
§Example message
Error: Got a 'middle' error
Caused by:
1: A nested error occured
2: 'inner' failed
3: Caught an error: Not implemented, yet.
§With thiserror
ⓘ
#[derive(pretty_error_debug::Debug, thiserror::Error)]
pub enum MyError {
#[error("Error variant 1 happened")]
Variant1(#[from] Error1),
#[error("Error variant 2 happened")]
Variant2(#[from] Error2),
}
fn main() -> Result<(), MyError> {
...
}
§With thiserror
, but without a new type
ⓘ
#[derive(Debug, thiserror::Error)]
pub enum MyError {
#[error("Error variant 1 happened")]
Variant1(#[from] Error1),
#[error("Error variant 2 happened")]
Variant2(#[from] Error2),
}
fn main() -> Result<(), pretty_error_debug::Wrapper<MyError>> {
...
}
§Without thiserror
use std::error::Error;
use std::fmt::{self, Write};
#[derive(pretty_error_debug::Debug)]
pub enum MyError {
Variant1(Error1),
Variant2(Error2),
}
impl fmt::Display for MyError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
MyError::Variant1(_) => write!(f, "Error variant 1 happened"),
MyError::Variant2(_) => write!(f, "Error variant 2 happened"),
}
}
}
impl Error for MyError {
fn source(&self) -> Option<&(dyn 'static + Error)> {
match self {
MyError::Variant1(source) => Some(source),
MyError::Variant2(source) => Some(source),
}
}
}
fn main() -> Result<(), MyError> {
...
}
Structs§
- Display
- Wrap a reference to an
Error
to display its error chain withformat!("{}")
. - Wrapper
- Wrap an
Error
to display its error chain in debug messages (format!("{:?}")
).
Functions§
- pretty_
error_ debug - Write out the
Error
message and chain.
Derive Macros§
- Debug
derive
- Derive
std::fmt::Debug
usingpretty_error_debug