use std::env;
use anyhow::bail;
use crate::args::strip_subcommand;
use crate::check::run_check;
use crate::config::CARGO_SUBCOMMAND;
use crate::help::{help_text, is_help_flag};
use crate::setup::run_setup;
use crate::update::run_update;
pub fn run() -> anyhow::Result<i32> {
let args = strip_subcommand(env::args(), CARGO_SUBCOMMAND);
dispatch(&args)
}
pub fn dispatch(args: &[String]) -> anyhow::Result<i32> {
match args.split_first() {
None => {
println!("{}", help_text());
Ok(0)
}
Some((flag, _)) if is_help_flag(flag) => {
println!("{}", help_text());
Ok(0)
}
Some((subcommand, rest)) if subcommand == "check" => run_check(rest),
Some((subcommand, rest)) if subcommand == "setup" => run_setup(rest),
Some((subcommand, rest)) if subcommand == "update" => run_update(rest),
Some((subcommand, _)) => {
bail!(
"unknown cargo-cgp subcommand `{subcommand}` (expected `check`, `setup`, or `update`)"
)
}
}
}