use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
pub type RelPath = String;
pub type ArtifactId = String;
pub type TripleName = String;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DistManifest {
#[serde(default)]
#[serde(skip_serializing_if = "BTreeMap::is_empty")]
pub artifacts: BTreeMap<ArtifactId, Artifact>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Artifact {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
pub kind: Option<ArtifactId>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
pub name: Option<ArtifactId>,
#[serde(skip_serializing_if = "Vec::is_empty")]
#[serde(default)]
pub target_triples: Vec<TripleName>,
#[serde(skip_serializing_if = "Vec::is_empty")]
#[serde(default)]
pub assets: Vec<Asset>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Asset {
#[serde(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub executable_name: Option<String>,
#[serde(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub path: Option<RelPath>,
#[serde(flatten)]
pub kind: AssetKind,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "kind")]
#[non_exhaustive]
pub enum AssetKind {
#[serde(rename = "executable")]
Executable(ExecutableAsset),
#[serde(rename = "c_dynamic_library")]
CDynamicLibrary(DynamicLibraryAsset),
#[serde(rename = "c_static_library")]
CStaticLibrary(StaticLibraryAsset),
#[serde(rename = "readme")]
Readme,
#[serde(rename = "license")]
License,
#[serde(rename = "changelog")]
Changelog,
#[serde(other)]
#[serde(rename = "unknown")]
Unknown,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ExecutableAsset {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
pub symbols_artifact: Option<ArtifactId>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DynamicLibraryAsset {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
pub symbols_artifact: Option<ArtifactId>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StaticLibraryAsset {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
pub symbols_artifact: Option<ArtifactId>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "kind")]
#[non_exhaustive]
pub enum ArtifactKind {
#[serde(rename = "executable-zip")]
ExecutableZip,
#[serde(rename = "symbols")]
Symbols,
#[serde(rename = "installer")]
Installer,
#[serde(rename = "checksum")]
Checksum,
#[serde(rename = "unified-checksum")]
UnifiedChecksum,
#[serde(rename = "source-tarball")]
SourceTarball,
#[serde(rename = "extra-artifact")]
ExtraArtifact,
#[serde(rename = "updater")]
Updater,
#[serde(other)]
#[serde(rename = "unknown")]
Unknown,
}