use std::{process, str::FromStr};
use bumpalo::Bump;
use clap::Parser;
use log::{LevelFilter, debug, error, info};
use orrery_cli::Args;
fn main() {
miette::set_panic_hook();
let args = Args::parse();
let log_level = LevelFilter::from_str(&args.log_level).unwrap_or_else(|_| {
eprintln!(
"Invalid log level: {}. Using 'warn' instead.",
args.log_level
);
LevelFilter::Warn
});
env_logger::Builder::from_env(env_logger::Env::default())
.filter_level(log_level)
.init();
info!(log_level:?; "Starting Orrery");
debug!(args:?; "Parsed arguments");
let arena = Bump::new();
if let Err(err) = orrery_cli::run(&args, &arena) {
let reporter = miette::GraphicalReportHandler::new();
for reportable in err.reportables() {
let mut writer = String::new();
reporter
.render_report(&mut writer, &*reportable)
.expect("Writing to String buffer is infallible");
error!("{writer}");
}
process::exit(1);
}
info!("Completed successfully");
}