-
Notifications
You must be signed in to change notification settings - Fork 11
Description
What I mean by this title is that if I want to manually print the entire error stack using the Error::source method, I get an error message twice. Example:
cannot parse argument "213": The length of hex string must be 6
The length of hex string must be 6
Code I use to unwind an error:
let args = args::parse_cli_args().unwrap_or_else(|err| {
let mut err: Box<&(dyn std::error::Error)> = Box::new(&err);
loop {
eprintln!("{}", err);
if let Some(source) = err.source() {
err = Box::new(source);
} else {
break;
}
}
std::process::exit(1);
});I understand that the idea behind "lexopt" is to be as simple as possible with no fuss. Therefore, I suggest not to change the current behavior much. We can move the current behavior to the "{:#}" formatter and use "{}" to print a single error message (to be able to print the full error manually). That is how anyhow does this1. But it will be breaking changes (or not?). What do you think? If you want to see it too, I can create a PR.
rust-lang/project-error-handling#23
For now, the recommendation is to always do one or the other. If you're going to print your sources, you should not return them via the source function and vice versa.
Cheers.