pub struct Search; impl util::Cmd for Search { fn cmd() -> eyre::Result { Ok(clap::Command::new("search") .allow_external_subcommands(true) .allow_missing_positional(true)) } fn exec(args: &clap::ArgMatches) -> eyre::Result<()> { match args.subcommand() { Some((external, args)) => { 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!["src", "search", external]; cmd_args.append(&mut raw.iter().map(|s| &**s).collect()); util::shell::run(cmd_args.as_slice(), None)?; } _ => todo!(), } Ok(()) } }