use {
anstream::eprintln,
owo_colors::*,
problemo::{common::*, *},
std::process::*,
};
pub type Runner = fn() -> Result<(), Problem>;
pub fn run(run: Runner) -> ExitCode {
match run() {
Ok(_) => ExitCode::SUCCESS,
Err(problem) => {
let message = match problem.error_of_type::<ExitError>() {
Some(error) => match &error.0 {
Some(message) => message.clone(),
None => "".into(),
},
None => problem.to_string(),
};
if !message.is_empty() {
eprintln!("{}", format!("{}", message.trim_end_matches('\n')).red());
}
problem.into()
}
}
}