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