1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Debug, Deserialize)]
7#[serde(rename_all = "PascalCase")]
8pub struct PackageMetadata {
9 pub description: Option<String>,
10 pub first_submitted: u64,
11 #[serde(alias = "ID")]
12 pub id: u32,
13 pub last_modified: u64,
14 pub maintainer: Option<String>,
15 pub name: String,
16 pub num_votes: u32,
17 pub out_of_date: Option<u64>,
18 pub package_base: String,
19 #[serde(alias = "PackageBaseID")]
20 pub package_base_id: u32,
21 pub popularity: f64,
22 #[serde(alias = "URL")]
23 pub url: Option<String>,
24 #[serde(alias = "URLPath")]
25 pub url_path: String,
26 pub version: String,
27}
28
29#[derive(Clone, Debug, Deserialize)]
32#[serde(from = "PackageInfoRaw")]
33pub struct PackageInfo {
34 pub metadata: PackageMetadata,
35 pub keywords: Vec<String>,
36 pub license: Vec<String>,
37 pub depends: Vec<String>,
38 pub make_depends: Vec<String>,
39 pub opt_depends: Vec<String>,
40 pub check_depends: Vec<String>
41}
42
43impl From<PackageInfoRaw> for PackageInfo {
44 fn from(info: PackageInfoRaw) -> Self {
45 PackageInfo {
46 metadata: PackageMetadata {
47 description: info.description,
48 first_submitted: info.first_submitted,
49 id: info.id,
50 last_modified: info.last_modified,
51 maintainer: info.maintainer,
52 name: info.name,
53 num_votes: info.num_votes,
54 out_of_date: info.out_of_date,
55 package_base: info.package_base,
56 package_base_id: info.package_base_id,
57 popularity: info.popularity,
58 url: info.url,
59 url_path: info.url_path,
60 version: info.version,
61 },
62 keywords: info.keywords,
63 license: info.license,
64 depends: info.depends,
65 opt_depends: info.opt_depends,
66 make_depends: info.make_depends,
67 check_depends: info.check_depends,
68 }
69 }
70}
71
72#[derive(Clone, Debug, Deserialize)]
75#[serde(rename_all = "PascalCase")]
76pub(crate) struct PackageInfoRaw {
77 pub keywords: Vec<String>,
78 pub license: Vec<String>,
79 #[serde(default)]
80 pub depends: Vec<String>,
81 #[serde(default)]
82 pub opt_depends: Vec<String>,
83 #[serde(default)]
84 pub check_depends: Vec<String>,
85 #[serde(default)]
86 pub make_depends: Vec<String>,
87 pub description: Option<String>,
88 pub first_submitted: u64,
89 #[serde(alias = "ID")]
90 pub id: u32,
91 pub last_modified: u64,
92 pub maintainer: Option<String>,
93 pub name: String,
94 pub num_votes: u32,
95 pub out_of_date: Option<u64>,
96 pub package_base: String,
97 #[serde(alias = "PackageBaseID")]
98 pub package_base_id: u32,
99 pub popularity: f64,
100 #[serde(alias = "URL")]
101 pub url: Option<String>,
102 #[serde(alias = "URLPath")]
103 pub url_path: String,
104 pub version: String,
105}
106
107#[derive(Clone, Debug, Serialize, Deserialize)]
109pub(crate) struct AURResponse<T> {
110 pub version: u8,
111 #[serde(alias = "type")]
112 pub response_type: ResponseType,
113 pub resultcount: u32,
114 pub results: Vec<T>,
115 #[serde(default)]
116 pub error: Option<String>,
117}
118
119#[derive(Clone, Debug, Serialize, Deserialize)]
121#[serde(rename_all = "lowercase")]
122pub(crate) enum ResponseType {
123 Error,
124 Search,
125 Info,
126 Multiinfo,
127}