use clap::Parser;
use scoop_rs::{operation, Session};
use crate::Result;
#[derive(Debug, Parser)]
#[clap(arg_required_else_help = true)]
pub struct Args {
query: String,
}
pub fn execute(args: Args, session: &Session) -> Result<()> {
let query = args.query;
let queries = vec![query.as_str()];
let options = vec![];
let packages = operation::package_query(session, queries, options, false)?;
let length = packages.len();
match length {
0 => eprintln!("Could not find package for query '{}'.", query),
_ => {
if length == 1 {
println!("Found 1 package for query '{}':", query);
} else {
println!("Found {} package(s) for query '{}':", length, query);
}
for (idx, pkg) in packages.iter().enumerate() {
println!("Identity: {}", pkg.ident());
println!("Name: {}", pkg.name());
println!("Bucket: {}", pkg.bucket());
println!(
"Description: {}",
pkg.description().unwrap_or("<no description>")
);
println!("Version: {}", pkg.version());
println!("Homepage: {}", pkg.homepage());
println!("License: {}", pkg.license());
println!(
"Shims: {}",
pkg.shims()
.map(|v| v.join(","))
.unwrap_or("<no shims>".to_owned())
);
if idx != (length - 1) {
println!();
}
}
}
}
Ok(())
}