1use serde::{Deserialize, Serialize};
4use std::collections::BTreeMap;
5pub type LocalPath = String;
6pub type RelPath = String;
7pub type SystemId = String;
8pub type AssetId = String;
9pub type ArtifactId = String;
10pub type TripleName = String;
11pub type SortedSet<T> = std::collections::BTreeSet<T>;
12
13#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct DistManifest {
15 #[serde(default)]
16 #[serde(skip_serializing_if = "BTreeMap::is_empty")]
17 pub artifacts: BTreeMap<ArtifactId, Artifact>,
18}
19
20#[derive(Debug, Clone, Serialize, Deserialize)]
21pub struct Artifact {
22 #[serde(skip_serializing_if = "Option::is_none")]
23 #[serde(default)]
24 pub kind: Option<ArtifactId>,
25
26 #[serde(skip_serializing_if = "Option::is_none")]
27 #[serde(default)]
28 pub name: Option<ArtifactId>,
29 #[serde(skip_serializing_if = "Vec::is_empty")]
30 #[serde(default)]
31 pub target_triples: Vec<TripleName>,
32 #[serde(skip_serializing_if = "Vec::is_empty")]
34 #[serde(default)]
35 pub assets: Vec<Asset>,
36}
37#[derive(Debug, Clone, Serialize, Deserialize)]
39pub struct Asset {
40 #[serde(default)]
42 #[serde(skip_serializing_if = "Option::is_none")]
43 pub executable_name: Option<String>,
44
45 #[serde(default)]
46 #[serde(skip_serializing_if = "Option::is_none")]
47 pub executable_dir: Option<String>,
48
49 #[serde(default)]
51 #[serde(skip_serializing_if = "Option::is_none")]
52 pub name: Option<String>,
53 #[serde(default)]
55 #[serde(skip_serializing_if = "Option::is_none")]
56 pub path: Option<RelPath>,
57 #[serde(flatten)]
59 pub kind: AssetKind,
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize)]
64#[serde(tag = "kind")]
65#[non_exhaustive]
66pub enum AssetKind {
67 #[serde(rename = "executable-dir")]
69 ExecutableDir(ExecutableAsset),
70 #[serde(rename = "executable")]
72 Executable(ExecutableAsset),
73 #[serde(rename = "c_dynamic_library")]
75 CDynamicLibrary(DynamicLibraryAsset),
76 #[serde(rename = "c_static_library")]
78 CStaticLibrary(StaticLibraryAsset),
79 #[serde(rename = "readme")]
81 Readme,
82 #[serde(rename = "license")]
84 License,
85 #[serde(rename = "changelog")]
87 Changelog,
88 #[serde(other)]
92 #[serde(rename = "unknown")]
93 Unknown,
94}
95
96#[derive(Debug, Clone, Serialize, Deserialize)]
98pub struct ExecutableAsset {
99 #[serde(skip_serializing_if = "Option::is_none")]
101 #[serde(default)]
102 pub symbols_artifact: Option<ArtifactId>,
103}
104
105#[derive(Debug, Clone, Serialize, Deserialize)]
107pub struct DynamicLibraryAsset {
108 #[serde(skip_serializing_if = "Option::is_none")]
110 #[serde(default)]
111 pub symbols_artifact: Option<ArtifactId>,
112}
113
114#[derive(Debug, Clone, Serialize, Deserialize)]
116pub struct StaticLibraryAsset {
117 #[serde(skip_serializing_if = "Option::is_none")]
119 #[serde(default)]
120 pub symbols_artifact: Option<ArtifactId>,
121}
122
123#[derive(Debug, Clone, Serialize, Deserialize)]
125#[serde(tag = "kind")]
126#[non_exhaustive]
127pub enum ArtifactKind {
128 #[serde(rename = "executable-zip")]
130 ExecutableZip,
131 #[serde(rename = "symbols")]
133 Symbols,
134 #[serde(rename = "installer")]
136 Installer,
137 #[serde(rename = "checksum")]
139 Checksum,
140 #[serde(rename = "unified-checksum")]
142 UnifiedChecksum,
143 #[serde(rename = "source-tarball")]
145 SourceTarball,
146 #[serde(rename = "extra-artifact")]
148 ExtraArtifact,
149 #[serde(rename = "updater")]
151 Updater,
152 #[serde(rename = "sbom")]
154 SBOM,
155 #[serde(other)]
159 #[serde(rename = "unknown")]
160 Unknown,
161}