pact_broker_cli/
main.rs

1pub mod cli;
2
3use clap::ArgMatches;
4use clap::error::ErrorKind;
5use clap_complete::{Shell, generate_to};
6
7use std::process::ExitCode;
8use std::str::FromStr;
9
10pub fn handle_matches(
11    matches: &Result<ArgMatches, clap::Error>,
12    raw_args: Option<Vec<String>>,
13) -> Result<(), ExitCode> {
14    let raw_args = if let Some(args) = raw_args {
15        args
16    } else {
17        std::env::args().skip(1).collect()
18    };
19    match matches {
20        Ok(results) => match results.subcommand() {
21            _ => {
22                let log_level = results
23                    .get_one::<String>("log-level")
24                    .map(|s| s.to_string())
25                    .unwrap_or_else(|| "off".to_string());
26                cli::utils::setup_loggers(&log_level);
27
28                match results.subcommand() {
29                    Some(("pactflow", args)) => Ok(cli::pactflow_client::run(args, raw_args)),
30                    Some(("completions", args)) => Ok(generate_completions(args)),
31                    _ => Ok(cli::pact_broker_client::run(results, raw_args)),
32                }
33            }
34        },
35        Err(err) => match err.kind() {
36            ErrorKind::DisplayHelp => {
37                let _ = err.print();
38                Ok(())
39            }
40            ErrorKind::DisplayVersion => {
41                let _ = err.print();
42                Ok(())
43            }
44            _ => err.exit(),
45        },
46    }
47}
48
49fn generate_completions(args: &ArgMatches) {
50    let shell = args
51        .get_one::<String>("shell")
52        .expect("a shell is required");
53    let out_dir = args
54        .get_one::<String>("dir")
55        .expect("a directory is expected")
56        .to_string();
57    let mut cmd = cli::build_cli();
58    let shell_enum = Shell::from_str(&shell).unwrap();
59    let _ = generate_to(
60        shell_enum,
61        &mut cmd,
62        "pact-broker-cli".to_string(),
63        &out_dir,
64    );
65    println!(
66        "ℹ️  {} shell completions for pact-broker-cli written to {}",
67        &shell_enum, &out_dir
68    );
69}