mod compare_cmd;
mod fetch;
mod output;
mod ranges_cmd;
mod run_cmd;
mod signals;
mod subscription;
mod summarize_cmd;
mod update_cmd;
use clap::{Parser, Subcommand};
use compare_cmd::CompareArgs;
use eyre::Result;
use ranges_cmd::RangesArgs;
use run_cmd::RunArgs;
use signals::spawn_os_signal_handler;
use summarize_cmd::SummarizeArgs;
use tokio_util::sync::CancellationToken;
#[derive(Parser)]
struct Cli {
#[command(subcommand)]
command: Command,
}
#[derive(Subcommand)]
enum Command {
Run(RunArgs),
Compare(CompareArgs),
Summarize(SummarizeArgs),
Update,
Ranges(RangesArgs),
}
#[tokio::main]
async fn main() -> Result<()> {
let _ = rustls::crypto::aws_lc_rs::default_provider()
.install_default()
.map_err(|_| ())
.ok();
let cli = Cli::parse();
let cancellation = CancellationToken::new();
spawn_os_signal_handler(cancellation.clone());
match cli.command {
Command::Run(args) => run_cmd::run(args, cancellation.clone()).await,
Command::Compare(args) => compare_cmd::compare(args).await,
Command::Summarize(args) => summarize_cmd::summarize(args),
Command::Update => update_cmd::update().await,
Command::Ranges(args) => ranges_cmd::ranges(args).await,
}
}