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(("pact-broker", args)) => Ok(cli::pact_broker_client::run(args, raw_args)),
30                    Some(("pactflow", args)) => Ok(cli::pactflow_client::run(args, raw_args)),
31                    Some(("completions", args)) => Ok(generate_completions(args)),
32                    _ => Ok(cli::build_cli().print_help().unwrap()),
33                }
34            }
35        },
36        Err(err) => match err.kind() {
37            ErrorKind::DisplayHelp => {
38                let _ = err.print();
39                Ok(())
40            }
41            ErrorKind::DisplayVersion => {
42                let _ = err.print();
43                Ok(())
44            }
45            _ => err.exit(),
46        },
47    }
48}
49
50fn generate_completions(args: &ArgMatches) {
51    let shell = args
52        .get_one::<String>("shell")
53        .expect("a shell is required");
54    let out_dir = args
55        .get_one::<String>("dir")
56        .expect("a directory is expected")
57        .to_string();
58    let mut cmd = cli::build_cli();
59    let shell_enum = Shell::from_str(&shell).unwrap();
60    let _ = generate_to(
61        shell_enum,
62        &mut cmd,
63        "pact-broker-cli".to_string(),
64        &out_dir,
65    );
66    println!(
67        "ℹ️  {} shell completions for pact-broker-cli written to {}",
68        &shell_enum, &out_dir
69    );
70}