Skip to main content

agentctl/
lib.rs

1pub mod cli;
2pub mod debug;
3pub mod diag;
4pub mod provider;
5pub mod workflow;
6
7use clap::error::ErrorKind;
8use clap::{CommandFactory, Parser};
9
10pub fn run() -> i32 {
11    run_from(std::env::args())
12}
13
14pub fn run_from<I, T>(argv: I) -> i32
15where
16    I: IntoIterator<Item = T>,
17    T: Into<std::ffi::OsString> + Clone,
18{
19    let cli = match cli::Cli::try_parse_from(argv) {
20        Ok(cli) => cli,
21        Err(err) => {
22            let code = match err.kind() {
23                ErrorKind::DisplayHelp | ErrorKind::DisplayVersion => 0,
24                _ => 64,
25            };
26            let _ = err.print();
27            return code;
28        }
29    };
30
31    match cli.command {
32        Some(cli::Command::Provider(args)) => match args.command {
33            Some(command) => provider::commands::run(command),
34            None => print_group_help("provider"),
35        },
36        Some(cli::Command::Diag(args)) => match args.command {
37            Some(command) => diag::run(command),
38            None => print_group_help("diag"),
39        },
40        Some(cli::Command::Debug(args)) => match args.command {
41            Some(command) => debug::run(command),
42            None => print_group_help("debug"),
43        },
44        Some(cli::Command::Workflow(args)) => match args.command {
45            Some(command) => workflow::run(command),
46            None => print_group_help("workflow"),
47        },
48        Some(cli::Command::Automation) => print_group_help("automation"),
49        None => print_root_help(),
50    }
51}
52
53fn print_root_help() -> i32 {
54    let mut cmd = cli::Cli::command();
55    if cmd.print_help().is_ok() {
56        println!();
57        return 0;
58    }
59    1
60}
61
62fn print_group_help(name: &str) -> i32 {
63    let mut cmd = cli::Cli::command();
64    if let Some(subcommand) = cmd.find_subcommand_mut(name)
65        && subcommand.print_help().is_ok()
66    {
67        println!();
68        return 0;
69    }
70    1
71}