use tracing::error;
pub fn handle_fatal_error(error: anyhow::Error, verbose: u8) -> ! {
use crate::error::ProdigyError;
error!("Fatal error: {}", error);
let exit_code = if let Some(prodigy_err) = error.downcast_ref::<ProdigyError>() {
eprintln!("{}", prodigy_err.user_message());
if verbose >= 1 {
eprintln!("\nContext Chain:\n{}", prodigy_err.developer_message());
}
prodigy_err.exit_code()
} else {
eprintln!("Error: {error}");
if verbose >= 1 {
eprintln!("\nError chain:");
for (i, cause) in error.chain().enumerate() {
eprintln!(" {}: {}", i, cause);
}
}
if error.to_string().contains("No workflow ID provided")
|| error.to_string().contains("required")
|| error.to_string().contains("Please specify")
{
2 } else {
1 }
};
std::process::exit(exit_code)
}