Skip to main content

usage_cli/
lib.rs

1#[macro_use]
2extern crate log;
3extern crate miette;
4extern crate xx;
5
6use miette::Result;
7
8pub use cli::Cli;
9
10mod cli;
11mod command_effects;
12pub mod env;
13mod usage_spec;
14
15#[cfg(test)]
16mod test;
17
18pub fn run(args: &[String]) -> Result<()> {
19    // trace!(
20    //     "args: {:?}",
21    //     args.iter().map(|s| s[..100].to_string()).collect_vec()
22    // );
23    // if let Some("__USAGE__") = args.get(2).map(|s| s.as_str()) {
24    //     return split_script(&args[1]);
25    // } else if let Some(script) = args.get(1) {
26    if let Some(script) = args.get(1) {
27        if script.to_lowercase() == "-v" {
28            println!("{} {}", env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION"));
29            return Ok(());
30        } else if script == "--usage-spec" {
31            return usage_spec::generate();
32        } else if script == "--completions" && args.len() > 2 {
33            return usage_spec::complete(args.get(2).unwrap());
34        }
35    }
36    let result = Cli::run(args);
37    if let Err(err) = &result {
38        if let Some(_err) = err.downcast_ref::<usage::error::UsageErr>() {
39            eprintln!("{err:?}");
40            std::process::exit(181);
41        }
42    };
43
44    result
45}