aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/mozart/src/main.rs')
-rw-r--r--crates/mozart/src/main.rs21
1 files changed, 19 insertions, 2 deletions
diff --git a/crates/mozart/src/main.rs b/crates/mozart/src/main.rs
index cd85137..dd85279 100644
--- a/crates/mozart/src/main.rs
+++ b/crates/mozart/src/main.rs
@@ -1,7 +1,24 @@
use clap::Parser;
use mozart::commands;
+use mozart::exit_code;
-fn main() -> anyhow::Result<()> {
+fn main() {
let cli = commands::Cli::parse();
- commands::execute(&cli)
+ match commands::execute(&cli) {
+ Ok(()) => {}
+ Err(e) => {
+ // Check if this is a structured MozartError with a specific exit code.
+ if let Some(mozart_err) = e.downcast_ref::<exit_code::MozartError>() {
+ // Only print a message when there is one (bail_silent produces empty message).
+ if !mozart_err.message.is_empty() {
+ eprintln!("{}", mozart::console::error(&mozart_err.message));
+ }
+ std::process::exit(mozart_err.exit_code);
+ }
+
+ // Generic anyhow error — print and exit with GENERAL_ERROR.
+ eprintln!("{}", mozart::console::error(&format!("{e:#}")));
+ std::process::exit(exit_code::GENERAL_ERROR);
+ }
+ }
}