1use serde::{Deserialize, Serialize};
4use std::collections::BTreeMap;
5pub(crate) type RelPath = String;
6pub(crate) type ArtifactId = String;
7pub(crate) type TripleName = String;
8
9#[derive(Debug, Clone, Serialize, Deserialize)]
10pub(crate) struct DistManifest {
11 #[serde(default)]
12 #[serde(skip_serializing_if = "BTreeMap::is_empty")]
13 pub(crate) artifacts: BTreeMap<ArtifactId, Artifact>,
14}
15
16#[derive(Debug, Clone, Serialize, Deserialize)]
17pub(crate) struct Artifact {
18 #[serde(skip_serializing_if = "Option::is_none")]
19 #[serde(default)]
20 pub(crate) kind: Option<ArtifactId>,
21
22 #[serde(skip_serializing_if = "Option::is_none")]
23 #[serde(default)]
24 pub(crate) name: Option<ArtifactId>,
25 #[serde(skip_serializing_if = "Vec::is_empty")]
26 #[serde(default)]
27 pub(crate) target_triples: Vec<TripleName>,
28 #[serde(skip_serializing_if = "Vec::is_empty")]
30 #[serde(default)]
31 pub(crate) assets: Vec<Asset>,
32}
33#[derive(Debug, Clone, Serialize, Deserialize)]
35pub(crate) struct Asset {
36 #[serde(default)]
38 #[serde(skip_serializing_if = "Option::is_none")]
39 pub(crate) executable_name: Option<String>,
40
41 #[serde(default)]
43 #[serde(skip_serializing_if = "Option::is_none")]
44 pub(crate) name: Option<String>,
45 #[serde(default)]
47 #[serde(skip_serializing_if = "Option::is_none")]
48 pub(crate) path: Option<RelPath>,
49 #[serde(flatten)]
51 pub(crate) kind: AssetKind,
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize)]
56#[serde(tag = "kind")]
57#[non_exhaustive]
58pub(crate) enum AssetKind {
59 #[serde(rename = "executable")]
61 Executable(ExecutableAsset),
62 #[serde(rename = "c_dynamic_library")]
64 CDynamicLibrary(DynamicLibraryAsset),
65 #[serde(rename = "c_static_library")]
67 CStaticLibrary(StaticLibraryAsset),
68 #[serde(rename = "readme")]
70 Readme,
71 #[serde(rename = "license")]
73 License,
74 #[serde(rename = "changelog")]
76 Changelog,
77 #[serde(other)]
81 #[serde(rename = "unknown")]
82 Unknown,
83}
84
85#[derive(Debug, Clone, Serialize, Deserialize)]
87pub(crate) struct ExecutableAsset {
88 #[serde(skip_serializing_if = "Option::is_none")]
90 #[serde(default)]
91 pub(crate) symbols_artifact: Option<ArtifactId>,
92}
93
94#[derive(Debug, Clone, Serialize, Deserialize)]
96pub(crate) struct DynamicLibraryAsset {
97 #[serde(skip_serializing_if = "Option::is_none")]
99 #[serde(default)]
100 pub(crate) symbols_artifact: Option<ArtifactId>,
101}
102
103#[derive(Debug, Clone, Serialize, Deserialize)]
105pub(crate) struct StaticLibraryAsset {
106 #[serde(skip_serializing_if = "Option::is_none")]
108 #[serde(default)]
109 pub(crate) symbols_artifact: Option<ArtifactId>,
110}
111
112