1use crate::{error::RPCResult, models::PackageMetadata};
2
3pub async fn search<S: AsRef<str>>(keywords: S) -> RPCResult<Vec<PackageMetadata>> {
5 search_by(SearchField::Name, keywords).await
6}
7
8pub async fn search_by<S: AsRef<str>>(
10 field: SearchField,
11 keywords: S,
12) -> RPCResult<Vec<PackageMetadata>> {
13 let args: Vec<(&str, &str)> = vec![
14 ("v", "5"),
15 ("type", "search"),
16 ("by", field.to_string()),
17 ("arg", keywords.as_ref()),
18 ];
19 let response = super::call_aur::<_, PackageMetadata>(&args).await?;
20
21 Ok(response.results)
22}
23
24#[derive(Debug, Clone, Copy)]
26pub enum SearchField {
27 Name,
29 NameDesc,
31 Maintainer,
33 Depends,
35 MakeDepends,
37 OptDepends,
39 CheckDepends,
41}
42
43impl SearchField {
44 pub(crate) fn to_string(&self) -> &'static str {
45 match self {
46 SearchField::Name => "name",
47 SearchField::NameDesc => "name-desc",
48 SearchField::Maintainer => "maintainer",
49 SearchField::Depends => "depends",
50 SearchField::MakeDepends => "makedepends",
51 SearchField::OptDepends => "optdepends",
52 SearchField::CheckDepends => "checkdepends",
53 }
54 }
55}