aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart/src/main.rs
blob: dd852790af22239a4d21d2f49081c9f693e09964 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use clap::Parser;
use mozart::commands;
use mozart::exit_code;

fn main() {
    let cli = commands::Cli::parse();
    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);
        }
    }
}