Backtrace is too verbose and inefficient, we should provide another way to locate errors.
By adding at method to Fail, We can write the code such as:
use position::{here, Position};
use failure::Fail;
#[derive(Fail, Debug)]
pub enum Bar {
// `Position` using for record error location
#[fail(display="foo")]
Foo(Position)
}
fn cause_error() -> Bar {
Bar::Foo(here!())
}
fn main() {
let err = cause_error();
let mut fail: &Fail = &err;
while let Some(cause) = fail.cause() {
let position = cause.at().map_or("...".to_owned(), |pos| pos.to_string());
println!("\t{} at {}",cause, position);
fail = cause;
}
}
Backtrace is too verbose and inefficient, we should provide another way to locate errors. By adding
at
method to Fail, We can write the code such as:It will print the error location.
Related library
Position