hpk/src/repository/mod.rs

45 lines
1.1 KiB
Rust

use {
crate::Package,
serde::{Deserialize, Serialize},
std::collections::HashMap,
url::Url,
};
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Repository {
pub name: String,
pub base_url: Url,
pub packages: HashMap<String, Package>,
}
impl Repository {
pub fn search_names(&self, query: &str) -> Vec<&Package> {
let mut results = vec![];
if let Some(p) = self.packages.get(query) {
results.push(p)
}
self.packages.iter().for_each(|(k, v)| {
if k.contains(query) {
results.push(v);
}
});
results
}
pub fn search_all(&self, query: &str) -> Vec<&Package> {
let mut results = vec![];
if let Some(p) = self.packages.get(query) {
results.push(p)
}
self.packages.iter().for_each(|(k, v)| {
if k.contains(query)
|| v.description.contains(query)
|| v.long_description.contains(query)
{
results.push(v);
}
});
results
}
}