1use std::collections::HashMap;
5
6use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
10pub struct Config {
11 pub name: Option<String>,
13 pub arch: Option<String>,
14 pub version: Option<String>,
15
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub apk: Option<ApkSpecificSettings>,
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub archlinux: Option<ArchlinuxSpecificSettings>,
20 #[serde(skip_serializing_if = "Option::is_none")]
22 pub changelog: Option<String>,
23 #[serde(skip_serializing_if = "Option::is_none")]
24 pub conflicts: Option<Vec<String>>,
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub contents: Option<Vec<ContentElement>>,
27 #[serde(skip_serializing_if = "Option::is_none")]
28 pub deb: Option<DebSpecificSettings>,
29 #[serde(skip_serializing_if = "Option::is_none")]
30 pub depends: Option<Vec<String>>,
31 #[serde(skip_serializing_if = "Option::is_none")]
32 pub description: Option<String>,
33 #[serde(skip_serializing_if = "Option::is_none")]
34 pub disable_globbing: Option<bool>,
35 #[serde(skip_serializing_if = "Option::is_none")]
36 pub epoch: Option<String>,
37 #[serde(skip_serializing_if = "Option::is_none")]
38 pub homepage: Option<String>,
39 #[serde(skip_serializing_if = "Option::is_none")]
40 pub ipk: Option<IpkSpecificSettings>,
41 #[serde(skip_serializing_if = "Option::is_none")]
42 pub license: Option<String>,
43 #[serde(skip_serializing_if = "Option::is_none")]
44 pub maintainer: Option<String>,
45 #[serde(skip_serializing_if = "Option::is_none")]
46 pub mtime: Option<String>,
47 #[serde(skip_serializing_if = "Option::is_none")]
49 pub overrides: Option<HashMap<String, OverrideValue>>,
50 #[serde(skip_serializing_if = "Option::is_none")]
51 pub platform: Option<String>,
52 #[serde(skip_serializing_if = "Option::is_none")]
53 pub prerelease: Option<String>,
54 #[serde(skip_serializing_if = "Option::is_none")]
55 pub priority: Option<String>,
56 #[serde(skip_serializing_if = "Option::is_none")]
57 pub provides: Option<Vec<String>>,
58 #[serde(skip_serializing_if = "Option::is_none")]
59 pub recommends: Option<Vec<String>>,
60 #[serde(skip_serializing_if = "Option::is_none")]
61 pub release: Option<String>,
62 #[serde(skip_serializing_if = "Option::is_none")]
63 pub replaces: Option<Vec<String>>,
64 #[serde(skip_serializing_if = "Option::is_none")]
65 pub rpm: Option<RpmSpecificSettings>,
66 #[serde(skip_serializing_if = "Option::is_none")]
67 pub scripts: Option<ScriptsToExecute>,
68 #[serde(skip_serializing_if = "Option::is_none")]
69 pub section: Option<String>,
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub suggests: Option<Vec<String>>,
72 #[serde(skip_serializing_if = "Option::is_none")]
73 pub umask: Option<i64>,
74 #[serde(skip_serializing_if = "Option::is_none")]
75 pub vendor: Option<String>,
76 #[serde(skip_serializing_if = "Option::is_none")]
77 pub version_metadata: Option<String>,
78 #[serde(skip_serializing_if = "Option::is_none")]
79 pub version_schema: Option<VersionSchema>,
80}
81
82#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
83pub struct ApkSpecificSettings {
84 #[serde(skip_serializing_if = "Option::is_none")]
85 pub arch: Option<String>,
86 #[serde(skip_serializing_if = "Option::is_none")]
87 pub scripts: Option<ApkScripts>,
88 #[serde(skip_serializing_if = "Option::is_none")]
89 pub signature: Option<ApkSignature>,
90}
91
92#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
93pub struct ApkScripts {
94 #[serde(skip_serializing_if = "Option::is_none")]
95 pub postupgrade: Option<String>,
96 #[serde(skip_serializing_if = "Option::is_none")]
97 pub preupgrade: Option<String>,
98}
99
100#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
101pub struct ApkSignature {
102 #[serde(skip_serializing_if = "Option::is_none")]
103 pub key_file: Option<String>,
104 #[serde(skip_serializing_if = "Option::is_none")]
105 pub key_id: Option<String>,
106 #[serde(skip_serializing_if = "Option::is_none")]
107 pub key_name: Option<String>,
108}
109
110#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
111pub struct ArchlinuxSpecificSettings {
112 #[serde(skip_serializing_if = "Option::is_none")]
113 pub arch: Option<String>,
114 #[serde(skip_serializing_if = "Option::is_none")]
115 pub packager: Option<String>,
116 #[serde(skip_serializing_if = "Option::is_none")]
117 pub pkgbase: Option<String>,
118 #[serde(skip_serializing_if = "Option::is_none")]
119 pub scripts: Option<ArchlinuxSpecificScripts>,
120}
121
122#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
123pub struct ArchlinuxSpecificScripts {
124 #[serde(skip_serializing_if = "Option::is_none")]
125 pub postupgrade: Option<String>,
126 #[serde(skip_serializing_if = "Option::is_none")]
127 pub preupgrade: Option<String>,
128}
129
130#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
131pub struct ContentElement {
132 pub dst: String,
133 #[serde(skip_serializing_if = "Option::is_none")]
134 pub expand: Option<bool>,
135 #[serde(skip_serializing_if = "Option::is_none")]
136 pub file_info: Option<FileInfo>,
137 #[serde(skip_serializing_if = "Option::is_none")]
138 pub packager: Option<String>,
139 #[serde(skip_serializing_if = "Option::is_none")]
140 pub src: Option<String>,
141 #[serde(rename = "type")]
142 #[serde(skip_serializing_if = "Option::is_none")]
143 pub confi_type: Option<Type>,
144}
145
146#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
147#[serde(rename_all = "snake_case")]
148pub enum Type {
149 Config,
150 #[serde(rename = "config|noreplace")]
151 ConfigNoreplace,
152 Dir,
153 #[default]
154 #[serde(rename = "")]
155 Empty,
156 Ghost,
157 Symlink,
158 Tree,
159}
160
161#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
162pub struct FileInfo {
163 #[serde(skip_serializing_if = "Option::is_none")]
164 pub group: Option<String>,
165 #[serde(skip_serializing_if = "Option::is_none")]
166 pub mode: Option<i64>,
167 #[serde(skip_serializing_if = "Option::is_none")]
168 pub mtime: Option<String>,
169 #[serde(skip_serializing_if = "Option::is_none")]
170 pub owner: Option<String>,
171}
172
173#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
174pub struct DebSpecificSettings {
175 #[serde(skip_serializing_if = "Option::is_none")]
176 pub arch: Option<String>,
177 #[serde(skip_serializing_if = "Option::is_none")]
178 pub breaks: Option<Vec<String>>,
179 #[serde(skip_serializing_if = "Option::is_none")]
180 pub compression: Option<DebCompression>,
181 #[serde(skip_serializing_if = "Option::is_none")]
182 pub fields: Option<HashMap<String, String>>,
183 #[serde(skip_serializing_if = "Option::is_none")]
184 pub predepends: Option<Vec<String>>,
185 #[serde(skip_serializing_if = "Option::is_none")]
186 pub scripts: Option<Scripts>,
187 #[serde(skip_serializing_if = "Option::is_none")]
188 pub signature: Option<Signature>,
189 #[serde(skip_serializing_if = "Option::is_none")]
190 pub triggers: Option<Triggers>,
191}
192
193#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
194#[serde(rename_all = "snake_case")]
195pub enum DebCompression {
196 #[default]
197 Gzip,
198 None,
199 Xz,
200}
201
202#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
203pub struct Scripts {
204 #[serde(skip_serializing_if = "Option::is_none")]
205 pub config: Option<String>,
206 #[serde(skip_serializing_if = "Option::is_none")]
207 pub rules: Option<String>,
208 #[serde(skip_serializing_if = "Option::is_none")]
209 pub templates: Option<String>,
210}
211
212#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
213pub struct Signature {
214 #[serde(skip_serializing_if = "Option::is_none")]
215 pub key_file: Option<String>,
216 #[serde(skip_serializing_if = "Option::is_none")]
217 pub key_id: Option<String>,
218 #[serde(skip_serializing_if = "Option::is_none")]
219 pub method: Option<MethodRole>,
220 #[serde(skip_serializing_if = "Option::is_none")]
221 pub signer: Option<String>,
222 #[serde(rename = "type")]
223 #[serde(skip_serializing_if = "Option::is_none")]
224 pub signature_type: Option<SignerRole>,
225}
226
227#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
228#[serde(rename_all = "snake_case")]
229pub enum MethodRole {
230 #[default]
231 Debsign,
232}
233
234#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
235#[serde(rename_all = "snake_case")]
236pub enum SignerRole {
237 Archive,
238 Maint,
239 #[default]
240 Origin,
241}
242
243#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
244pub struct Triggers {
245 #[serde(skip_serializing_if = "Option::is_none")]
246 pub activate: Option<Vec<String>>,
247 #[serde(skip_serializing_if = "Option::is_none")]
248 pub activate_await: Option<Vec<String>>,
249 #[serde(skip_serializing_if = "Option::is_none")]
250 pub activate_noawait: Option<Vec<String>>,
251 #[serde(skip_serializing_if = "Option::is_none")]
252 pub interest: Option<Vec<String>>,
253 #[serde(skip_serializing_if = "Option::is_none")]
254 pub interest_await: Option<Vec<String>>,
255 #[serde(skip_serializing_if = "Option::is_none")]
256 pub interest_noawait: Option<Vec<String>>,
257}
258
259#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
260pub struct IpkSpecificSettings {
261 #[serde(skip_serializing_if = "Option::is_none")]
262 pub abi_version: Option<String>,
263 #[serde(skip_serializing_if = "Option::is_none")]
264 pub alternatives: Option<Vec<Alternative>>,
265 #[serde(skip_serializing_if = "Option::is_none")]
266 pub arch: Option<String>,
267 #[serde(skip_serializing_if = "Option::is_none")]
268 pub auto_installed: Option<bool>,
269 #[serde(skip_serializing_if = "Option::is_none")]
270 pub essential: Option<bool>,
271 #[serde(skip_serializing_if = "Option::is_none")]
272 pub fields: Option<HashMap<String, String>>,
273 #[serde(skip_serializing_if = "Option::is_none")]
274 pub predepends: Option<Vec<String>>,
275 #[serde(skip_serializing_if = "Option::is_none")]
276 pub tags: Option<Vec<String>>,
277}
278
279#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
280pub struct Alternative {
281 #[serde(skip_serializing_if = "Option::is_none")]
282 pub link_name: Option<String>,
283 #[serde(skip_serializing_if = "Option::is_none")]
284 pub priority: Option<i64>,
285 #[serde(skip_serializing_if = "Option::is_none")]
286 pub target: Option<String>,
287}
288
289#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
290pub struct OverrideValue {
291 #[serde(skip_serializing_if = "Option::is_none")]
292 pub apk: Option<ApkSpecificSettings>,
293 #[serde(skip_serializing_if = "Option::is_none")]
294 pub archlinux: Option<ArchlinuxSpecificSettings>,
295 #[serde(skip_serializing_if = "Option::is_none")]
296 pub conflicts: Option<Vec<String>>,
297 #[serde(skip_serializing_if = "Option::is_none")]
298 pub contents: Option<Vec<ContentElement>>,
299 #[serde(skip_serializing_if = "Option::is_none")]
300 pub deb: Option<DebSpecificSettings>,
301 #[serde(skip_serializing_if = "Option::is_none")]
302 pub depends: Option<Vec<String>>,
303 #[serde(skip_serializing_if = "Option::is_none")]
304 pub ipk: Option<IpkSpecificSettings>,
305 #[serde(skip_serializing_if = "Option::is_none")]
306 pub provides: Option<Vec<String>>,
307 #[serde(skip_serializing_if = "Option::is_none")]
308 pub recommends: Option<Vec<String>>,
309 #[serde(skip_serializing_if = "Option::is_none")]
310 pub replaces: Option<Vec<String>>,
311 #[serde(skip_serializing_if = "Option::is_none")]
312 pub rpm: Option<RpmSpecificSettings>,
313 #[serde(skip_serializing_if = "Option::is_none")]
314 pub scripts: Option<ScriptsToExecute>,
315 #[serde(skip_serializing_if = "Option::is_none")]
316 pub suggests: Option<Vec<String>>,
317 #[serde(skip_serializing_if = "Option::is_none")]
318 pub umask: Option<i64>,
319}
320
321#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
322pub struct RpmSpecificSettings {
323 #[serde(skip_serializing_if = "Option::is_none")]
324 pub arch: Option<String>,
325 #[serde(skip_serializing_if = "Option::is_none")]
326 pub compression: Option<RpmCompression>,
327 #[serde(skip_serializing_if = "Option::is_none")]
328 pub group: Option<String>,
329 #[serde(skip_serializing_if = "Option::is_none")]
330 pub packager: Option<String>,
331 #[serde(skip_serializing_if = "Option::is_none")]
332 pub prefixes: Option<Vec<String>>,
333 #[serde(skip_serializing_if = "Option::is_none")]
334 pub scripts: Option<RpmSpecificScripts>,
335 #[serde(skip_serializing_if = "Option::is_none")]
336 pub signature: Option<RpmSignature>,
337 #[serde(skip_serializing_if = "Option::is_none")]
338 pub summary: Option<String>,
339}
340
341#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
342#[serde(rename_all = "snake_case")]
343pub enum RpmCompression {
344 #[default]
345 Gzip,
346 Lzma,
347 Xz,
348}
349
350#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
351pub struct RpmSpecificScripts {
352 #[serde(skip_serializing_if = "Option::is_none")]
353 pub posttrans: Option<String>,
354 #[serde(skip_serializing_if = "Option::is_none")]
355 pub pretrans: Option<String>,
356 #[serde(skip_serializing_if = "Option::is_none")]
357 pub verify: Option<String>,
358}
359
360#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
361pub struct RpmSignature {
362 #[serde(skip_serializing_if = "Option::is_none")]
363 pub key_file: Option<String>,
364 #[serde(skip_serializing_if = "Option::is_none")]
365 pub key_id: Option<String>,
366}
367
368#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
369pub struct ScriptsToExecute {
370 #[serde(skip_serializing_if = "Option::is_none")]
371 pub postinstall: Option<String>,
372 #[serde(skip_serializing_if = "Option::is_none")]
373 pub postremove: Option<String>,
374 #[serde(skip_serializing_if = "Option::is_none")]
375 pub preinstall: Option<String>,
376 #[serde(skip_serializing_if = "Option::is_none")]
377 pub preremove: Option<String>,
378}
379
380#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
381#[serde(rename_all = "snake_case")]
382pub enum VersionSchema {
383 None,
384 #[default]
385 Semver,
386}