pub fn fmt_err(err: &impl std::error::Error) -> String {
fn format_err_internal(err: &impl std::error::Error) -> String {
let mut msg = err.to_string();
if let Some(source) = err.source() {
let source_msg = format_err_internal(&source);
let indented = source_msg.replace("\n", "\n\t");
msg = format!("{}\nCaused by:\n\t{}", msg, indented);
}
msg
}
let err_msg = format_err_internal(err);
format!(
"Error: {}",
err_msg.replacen("\nCaused by:", "\n\nCaused by:", 1)
)
}