git_bump/
cli.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use clap::{ArgGroup, Parser};

use crate::{bump, list_files, print_sample_config, Result};

#[derive(Parser)]
#[clap(author, version, about, long_about = None)]
#[clap(group(
    ArgGroup::new("action")
        .required(true)
        .args(&[
            "version",
            "list-files",
            "print-sample-config",
        ]),
))]
struct Cli {
    /// Version to set
    version: Option<String>,

    #[clap(long)]
    /// List files that would be updated
    list_files: bool,

    #[clap(long)]
    /// Print sample config file
    print_sample_config: bool,
}

pub fn run() -> Result<()> {
    let cli = Cli::parse();

    if let Some(version) = cli.version {
        bump(version)?
    } else if cli.list_files {
        list_files()?
    } else if cli.print_sample_config {
        print_sample_config()
    }

    Ok(())
}

#[test]
fn verify_app() {
    use clap::CommandFactory;
    Cli::command().debug_assert()
}