changepacks_cli/
lib.rs

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}