#![allow(clippy::result_large_err)]
use std::process::ExitCode;
use clap::Parser;
use callisto_cli::cli::{Cli, Command};
use callisto_cli::commands::*;
fn main() -> ExitCode {
let cli = Cli::parse();
let res = match cli.command {
Command::Add(args) => add::handle(args, &cli.global),
Command::Status(args) => status::handle(args, &cli.global),
Command::Matrix(args) => matrix::handle(args, &cli.global),
Command::Version(args) => version::handle(args, &cli.global),
Command::Pre(args) => pre::handle(args, &cli.global),
Command::Validate(args) => validate::handle(args, &cli.global),
Command::Snapshot(args) => snapshot::handle(args, &cli.global),
Command::Init(args) => init::handle(args, &cli.global),
Command::PlanPublish(args) => plan_publish::handle(args, &cli.global),
Command::Publish(args) => publish::handle(args, &cli.global),
Command::ComposePrBody(args) => compose_pr_body::handle(args, &cli.global),
Command::Tag(args) => tag::handle(args, &cli.global),
Command::Completions(args) => completions::handle(args, &cli.global),
Command::Schema(args) => schema::handle(args, &cli.global),
};
match res {
Ok(code) => code,
Err(err) => {
if cli.global.format == callisto_cli::cli::OutputFormat::Json {
let report = callisto_cli::error::format_error_json(&err);
let _res = callisto_cli::output::write_json(&mut std::io::stderr(), &report);
} else {
eprintln!("{:?}", miette::Report::new(err));
}
ExitCode::FAILURE
}
}
}