use serde_derive::{Deserialize, Serialize};
use std::fmt;
pub static AUR_RPC_URL: &str = "https://aur.archlinux.org/rpc/";
#[derive(Serialize, Deserialize, Clone, Debug, Default)]
#[serde(rename_all = "PascalCase")]
pub struct Package {
#[serde(rename = "ID")]
pub id: u32,
pub name: String,
#[serde(rename = "PackageBaseID")]
pub package_base_id: u32,
pub package_base: String,
pub version: String,
pub description: Option<String>,
#[serde(default, rename = "URL")]
pub url: Option<String>,
pub num_votes: u32,
pub popularity: f64,
pub out_of_date: Option<i64>,
pub maintainer: Option<String>,
pub submitter: Option<String>,
pub first_submitted: i64,
pub last_modified: i64,
#[serde(default, rename = "URLPath")]
pub url_path: String,
#[serde(default)]
pub groups: Vec<String>,
#[serde(default)]
pub depends: Vec<String>,
#[serde(default)]
pub make_depends: Vec<String>,
#[serde(default)]
pub opt_depends: Vec<String>,
#[serde(default)]
pub check_depends: Vec<String>,
#[serde(default)]
pub conflicts: Vec<String>,
#[serde(default)]
pub replaces: Vec<String>,
#[serde(default)]
pub provides: Vec<String>,
#[serde(default)]
pub license: Vec<String>,
#[serde(default)]
pub keywords: Vec<String>,
#[serde(default, rename = "CoMaintainers")]
pub co_maintainers: Vec<String>,
}
#[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash, Default)]
pub enum SearchBy {
Name,
#[default]
NameDesc,
Maintainer,
Submitter,
Depends,
MakeDepends,
OptDepends,
CheckDepends,
Provides,
Conflicts,
Replaces,
Groups,
Keywords,
CoMaintainers,
}
impl fmt::Display for SearchBy {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
fmt.write_str(match self {
SearchBy::Name => "name",
SearchBy::NameDesc => "name-desc",
SearchBy::Maintainer => "maintainer",
SearchBy::Submitter => "submitter",
SearchBy::Depends => "depends",
SearchBy::MakeDepends => "makedepends",
SearchBy::OptDepends => "optdepends",
SearchBy::CheckDepends => "checkdepends",
SearchBy::Provides => "provides",
SearchBy::Conflicts => "conflicts",
SearchBy::Replaces => "replaces",
SearchBy::Groups => "groups",
SearchBy::Keywords => "keywords",
SearchBy::CoMaintainers => "comaintainers",
})
}
}