use crate::Cache;
use raur::{Package, Raur};
pub trait RaurExt: Raur {
fn cache_info<S: AsRef<str>>(
&self,
cache: &mut Cache,
pkgs: &[S],
) -> Result<Vec<crate::Package>, Self::Err> {
let mut ret = Vec::with_capacity(pkgs.len());
let mut resolve = Vec::with_capacity(pkgs.len());
for pkg in pkgs {
if let Some(pkg) = cache.get(pkg.as_ref()) {
ret.push(pkg.clone());
} else {
resolve.push(pkg.as_ref());
}
}
for chunk in resolve.chunks(100) {
let res = self.info(chunk)?;
cache.reserve(res.len());
ret.reserve(res.len());
for pkg in res.into_iter() {
let pkg = crate::Package::from(pkg);
cache.insert(pkg.clone());
ret.push(pkg);
}
}
Ok(ret)
}
fn info_ext<S: AsRef<str>>(&self, pkgs: &[S]) -> Result<Vec<Package>, Self::Err> {
let mut packages = Vec::with_capacity(pkgs.len());
for chunk in pkgs.chunks(100) {
let res = self.info(chunk)?;
packages.extend(res.into_iter().map(Into::into));
}
Ok(packages)
}
}
impl<T> RaurExt for T where T: Raur {}