1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5pub const SCHEMA_VERSION: u32 = 7;
7
8#[derive(Debug, Clone, Serialize, Deserialize)]
12pub struct Manifest {
13 pub schema_version: u32,
14 pub asset_version: String,
15 pub built_at: String,
16 #[serde(default, skip_serializing_if = "Option::is_none")]
17 pub source_repo: Option<String>,
18 #[serde(default, skip_serializing_if = "Option::is_none")]
19 pub source_ref: Option<String>,
20 #[serde(default, skip_serializing_if = "Option::is_none")]
21 pub source_sha: Option<String>,
22 pub targets: BTreeMap<String, Target>,
24 #[serde(default, skip_serializing_if = "Vec::is_empty")]
26 pub binaries: Vec<Binary>,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize)]
31pub struct Target {
32 pub kernel: FileEntry,
33 pub rootfs: FileEntry,
34 pub kernel_cmdline: String,
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize)]
39pub struct FileEntry {
40 pub path: String,
41 pub sha256: String,
42 #[serde(default, skip_serializing_if = "Option::is_none")]
43 pub version: Option<String>,
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize)]
48pub struct Binary {
49 pub name: String,
50 pub version: String,
51 pub targets: BTreeMap<String, BinaryTarget>,
53}
54
55#[derive(Debug, Clone, Serialize, Deserialize)]
57pub struct BinaryTarget {
58 pub path: String,
59 pub sha256: String,
60}