Improved formatting of dcb_util::fmt_err.

This commit is contained in:
Filipe Rodrigues 2021-04-30 17:37:28 +01:00
parent 6548ef75a8
commit e807189052
2 changed files with 16 additions and 12 deletions

View File

@ -42,21 +42,21 @@ fn main() -> Result<(), anyhow::Error> {
let known_data: Vec<_> = dcb_util::parse_from_file(&known_data_path, serde_yaml::from_reader)
.map_err(dcb_util::fmt_err_wrapper_owned)
.map_err(|err| log::warn!("Unable to load game data from {known_data_path:?}:\n{err}"))
.map_err(|err| log::warn!("Unable to load game data from {known_data_path:?}: {err}"))
.unwrap_or_default();
let foreign_data: Vec<_> = dcb_util::parse_from_file(&foreign_data_path, serde_yaml::from_reader)
.map_err(dcb_util::fmt_err_wrapper_owned)
.map_err(|err| log::warn!("Unable to load foreign data from {foreign_data_path:?}:\n{err}"))
.map_err(|err| log::warn!("Unable to load foreign data from {foreign_data_path:?}: {err}"))
.unwrap_or_default();
let data_table = known_data.into_iter().chain(foreign_data).collect();
let func_table = dcb_util::parse_from_file(&known_funcs_path, serde_yaml::from_reader)
.map_err(dcb_util::fmt_err_wrapper_owned)
.map_err(|err| log::warn!("Unable to load functions from {known_funcs_path:?}:\n{err}"))
.map_err(|err| log::warn!("Unable to load functions from {known_funcs_path:?}: {err}"))
.unwrap_or_default();
let mut inst_arg_overrides = dcb_util::parse_from_file(&inst_arg_overrides_path, serde_yaml::from_reader)
.map_err(dcb_util::fmt_err_wrapper_owned)
.map_err(|err| log::warn!("Unable to load instruction overrides from {inst_arg_overrides_path:?}:\n{err}"))
.map_err(|err| log::warn!("Unable to load instruction overrides from {inst_arg_overrides_path:?}: {err}"))
.unwrap_or_default();
// Read the executable
@ -321,7 +321,7 @@ pub fn inst_display<'a>(
};
if let Err(err) = validate() {
log::warn!("Override for {}/{} failed validation:\n{:?}", pos, idx, err);
log::warn!("Override for {}/{} failed validation: {:?}", pos, idx, err);
}
match arg {

View File

@ -155,14 +155,18 @@ pub const fn saturating_signed_offset(a: u64, b: i64) -> u64 {
pub fn fmt_err(err: &(dyn error::Error + '_), f: &mut fmt::Formatter) -> fmt::Result {
writeln!(f, "{err}")?;
match err.source() {
Some(source) => {
writeln!(f, "Caused by:")?;
write!(f, "\t")?;
fmt_err(source, f)
},
None => Ok(()),
let mut source = err.source();
for n in 1usize.. {
match source {
Some(err) => {
write!(f, " {n}: {err}")?;
source = err.source();
},
None => break,
}
}
Ok(())
}
/// Returns a wrapper that prints an error