use std::fmt::Write;
pub fn expand_error_chain(err: &anyhow::Error) -> String {
let mut error_chain = String::new();
let mut current_error: Option<&(dyn std::error::Error + 'static)> = Some(err.as_ref());
let mut is_first = true;
while let Some(error) = current_error {
if !is_first {
write!(error_chain, "\nCaused by: ").unwrap();
}
write!(error_chain, "{error}").unwrap();
current_error = error.source();
is_first = false;
}
error_chain
}
#[macro_export]
macro_rules! czsc_bail {
($msg:literal $(,)?) => {
return Err(anyhow::anyhow!($msg).into())
};
($err:expr $(,)?) => {
return Err(anyhow::anyhow!($err).into())
};
($fmt:expr, $($arg:tt)*) => {
return Err(anyhow::anyhow!($fmt, $($arg)*).into())
};
}