mod auth; mod fuzzy_clone; mod gh; pub struct GitHub; impl GitHub { fn run(external: &str, args: &clap::ArgMatches) -> eyre::Result<()> { let raw = args .get_many::("") .ok_or(eyre::anyhow!("please pass some args to search"))? .map(|s| s.as_os_str()) .map(|s| s.to_string_lossy().to_string()) .collect::>(); let cmd = format!("src search {external} {}", raw.join(" ")); println!("{cmd}"); let mut cmd_args = vec!["gh", external]; cmd_args.append(&mut raw.iter().map(|s| &**s).collect()); util::shell::run(cmd_args.as_slice(), None)?; Ok(()) } } impl util::Cmd for GitHub { fn cmd() -> eyre::Result { Ok(clap::Command::new("github") .subcommands(&[ auth::Auth::cmd()?, gh::Gh::cmd()?, fuzzy_clone::FuzzyClone::cmd()?, ]) .allow_external_subcommands(true)) } fn exec(args: &clap::ArgMatches) -> eyre::Result<()> { match args.subcommand() { Some(("auth", subm)) => auth::Auth::exec(subm), Some(("fuzzy-clone", subm)) => fuzzy_clone::FuzzyClone::exec(subm), Some(("fc", subm)) => fuzzy_clone::FuzzyClone::exec(subm), Some(("gh", subm)) => gh::Gh::exec(subm), Some((external, args)) => Self::run(external, args), _ => Err(eyre::anyhow!("missing argument")), } } }