use clap::Parser;
use crate::{
actions::BergCommand,
render::json::JsonToStdout,
types::{config::BergConfig, output::OutputMode},
};
pub async fn berg_main() {
tracing_subscriber::fmt::init();
let cmd = BergCommand::parse();
let output_mode = cmd.output_mode;
if let Err(err) = cmd.run().await {
match output_mode {
OutputMode::Pretty => output_pretty_error(err),
OutputMode::Json => output_json_error(err),
}
std::process::exit(1);
}
}
fn output_json_error(error: miette::Error) {
#[derive(serde::Serialize)]
struct BergErrorMessage {
error_message: String,
}
BergErrorMessage {
error_message: error.to_string(),
}
.print_json()
.expect("String to JSON always works");
}
fn output_pretty_error(error: miette::Error) {
let config = match BergConfig::new() {
Ok(config) => config,
Err(e) => {
eprintln!("{e:?}");
std::process::exit(1);
}
};
let err = format!("{error:?}");
let table = config.make_table().add_error(err.trim());
eprintln!("\n{table}", table = table.show());
}