1use anyhow::Result;
2
3use clap::{Parser, Subcommand};
4
5use crate::{
6 commands::{
7 ChangepackArgs, CheckArgs, ConfigArgs, InitArgs, UpdateArgs, handle_changepack,
8 handle_check, handle_config, handle_init, handle_update,
9 },
10 options::FilterOptions,
11};
12mod commands;
13mod finders;
14mod options;
15
16#[derive(Parser, Debug)]
17#[command(author, version, about = "changepacks CLI")]
18struct Cli {
19 #[command(subcommand)]
20 command: Option<Commands>,
21
22 #[arg(short, long)]
23 filter: Option<FilterOptions>,
24
25 #[arg(short, long, default_value = "false")]
26 remote: bool,
27}
28#[derive(Subcommand, Debug)]
29enum Commands {
30 Init(InitArgs),
31 Check(CheckArgs),
32 Update(UpdateArgs),
33 Config(ConfigArgs),
34}
35
36pub async fn main(args: &[String]) -> Result<()> {
37 let cli = Cli::parse_from(args);
38 if let Some(command) = cli.command {
39 match command {
40 Commands::Init(args) => handle_init(&args).await?,
41 Commands::Check(args) => handle_check(&args).await?,
42 Commands::Update(args) => handle_update(&args).await?,
43 Commands::Config(args) => handle_config(&args).await?,
44 }
45 } else {
46 handle_changepack(&ChangepackArgs {
47 filter: cli.filter,
48 remote: cli.remote,
49 })
50 .await?;
51 }
52 Ok(())
53}