45 lines
1.1 KiB
Rust
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
|
|
}
|
|
}
|