use crate::{error::RPCResult, models::PackageMetadata};
pub async fn search<S: AsRef<str>>(keywords: S) -> RPCResult<Vec<PackageMetadata>> {
search_by(SearchField::Name, keywords).await
}
pub async fn search_by<S: AsRef<str>>(
field: SearchField,
keywords: S,
) -> RPCResult<Vec<PackageMetadata>> {
let args: Vec<(&str, &str)> = vec![
("v", "5"),
("type", "search"),
("by", field.to_string()),
("arg", keywords.as_ref()),
];
let response = super::call_aur::<_, PackageMetadata>(&args).await?;
Ok(response.results)
}
#[derive(Debug, Clone, Copy)]
pub enum SearchField {
Name,
NameDesc,
Maintainer,
Depends,
MakeDepends,
OptDepends,
CheckDepends,
}
impl SearchField {
pub(crate) fn to_string(&self) -> &'static str {
match self {
SearchField::Name => "name",
SearchField::NameDesc => "name-desc",
SearchField::Maintainer => "maintainer",
SearchField::Depends => "depends",
SearchField::MakeDepends => "makedepends",
SearchField::OptDepends => "optdepends",
SearchField::CheckDepends => "checkdepends",
}
}
}