#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum ArtifactKind {
Binary,
UploadableBinary,
UniversalBinary,
Library,
Header,
CArchive,
CShared,
Wasm,
Archive,
SourceArchive,
Makeself,
AppImage,
InstallScript,
LinuxPackage,
Snap,
PublishableSnapcraft,
Flatpak,
SourceRpm,
DiskImage,
Installer,
MacOsPackage,
DockerImage,
DockerImageV2,
PublishableDockerImage,
DockerManifest,
DockerDigest,
BrewFormula,
BrewCask,
Nixpkg,
ScoopManifest,
PublishableChocolatey,
WingetInstaller,
WingetDefaultLocale,
WingetVersion,
PkgBuild,
SrcInfo,
SourcePkgBuild,
SourceSrcInfo,
KrewPluginManifest,
Checksum,
Signature,
Certificate,
Sbom,
Metadata,
UploadableFile,
}
impl std::fmt::Display for ArtifactKind {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(self.as_str())
}
}
impl ArtifactKind {
pub fn as_str(&self) -> &'static str {
match self {
ArtifactKind::Binary => "binary",
ArtifactKind::UploadableBinary => "uploadable_binary",
ArtifactKind::UniversalBinary => "universal_binary",
ArtifactKind::Library => "library",
ArtifactKind::Header => "header",
ArtifactKind::CArchive => "c_archive",
ArtifactKind::CShared => "c_shared",
ArtifactKind::Wasm => "wasm",
ArtifactKind::Archive => "archive",
ArtifactKind::SourceArchive => "source_archive",
ArtifactKind::Makeself => "makeself",
ArtifactKind::AppImage => "appimage",
ArtifactKind::InstallScript => "install_script",
ArtifactKind::LinuxPackage => "linux_package",
ArtifactKind::Snap => "snap",
ArtifactKind::PublishableSnapcraft => "publishable_snapcraft",
ArtifactKind::Flatpak => "flatpak",
ArtifactKind::SourceRpm => "source_rpm",
ArtifactKind::DiskImage => "disk_image",
ArtifactKind::Installer => "installer",
ArtifactKind::MacOsPackage => "macos_package",
ArtifactKind::DockerImage => "docker_image",
ArtifactKind::DockerImageV2 => "docker_image_v2",
ArtifactKind::PublishableDockerImage => "publishable_docker_image",
ArtifactKind::DockerManifest => "docker_manifest",
ArtifactKind::DockerDigest => "docker_digest",
ArtifactKind::BrewFormula => "brew_formula",
ArtifactKind::BrewCask => "brew_cask",
ArtifactKind::Nixpkg => "nixpkg",
ArtifactKind::ScoopManifest => "scoop_manifest",
ArtifactKind::PublishableChocolatey => "publishable_chocolatey",
ArtifactKind::WingetInstaller => "winget_installer",
ArtifactKind::WingetDefaultLocale => "winget_default_locale",
ArtifactKind::WingetVersion => "winget_version",
ArtifactKind::PkgBuild => "pkg_build",
ArtifactKind::SrcInfo => "src_info",
ArtifactKind::SourcePkgBuild => "source_pkg_build",
ArtifactKind::SourceSrcInfo => "source_src_info",
ArtifactKind::KrewPluginManifest => "krew_plugin_manifest",
ArtifactKind::Checksum => "checksum",
ArtifactKind::Signature => "signature",
ArtifactKind::Certificate => "certificate",
ArtifactKind::Sbom => "sbom",
ArtifactKind::Metadata => "metadata",
ArtifactKind::UploadableFile => "uploadable_file",
}
}
pub fn parse(s: &str) -> Option<Self> {
match s {
"binary" => Some(ArtifactKind::Binary),
"uploadable_binary" => Some(ArtifactKind::UploadableBinary),
"universal_binary" => Some(ArtifactKind::UniversalBinary),
"library" => Some(ArtifactKind::Library),
"header" => Some(ArtifactKind::Header),
"c_archive" => Some(ArtifactKind::CArchive),
"c_shared" => Some(ArtifactKind::CShared),
"wasm" => Some(ArtifactKind::Wasm),
"archive" => Some(ArtifactKind::Archive),
"source_archive" => Some(ArtifactKind::SourceArchive),
"makeself" => Some(ArtifactKind::Makeself),
"appimage" => Some(ArtifactKind::AppImage),
"install_script" => Some(ArtifactKind::InstallScript),
"linux_package" => Some(ArtifactKind::LinuxPackage),
"snap" => Some(ArtifactKind::Snap),
"publishable_snapcraft" => Some(ArtifactKind::PublishableSnapcraft),
"flatpak" => Some(ArtifactKind::Flatpak),
"source_rpm" => Some(ArtifactKind::SourceRpm),
"disk_image" => Some(ArtifactKind::DiskImage),
"installer" => Some(ArtifactKind::Installer),
"macos_package" => Some(ArtifactKind::MacOsPackage),
"docker_image" => Some(ArtifactKind::DockerImage),
"docker_image_v2" => Some(ArtifactKind::DockerImageV2),
"publishable_docker_image" => Some(ArtifactKind::PublishableDockerImage),
"docker_manifest" => Some(ArtifactKind::DockerManifest),
"docker_digest" => Some(ArtifactKind::DockerDigest),
"brew_formula" => Some(ArtifactKind::BrewFormula),
"brew_cask" => Some(ArtifactKind::BrewCask),
"nixpkg" => Some(ArtifactKind::Nixpkg),
"scoop_manifest" => Some(ArtifactKind::ScoopManifest),
"publishable_chocolatey" => Some(ArtifactKind::PublishableChocolatey),
"winget_installer" => Some(ArtifactKind::WingetInstaller),
"winget_default_locale" => Some(ArtifactKind::WingetDefaultLocale),
"winget_version" => Some(ArtifactKind::WingetVersion),
"pkg_build" => Some(ArtifactKind::PkgBuild),
"src_info" => Some(ArtifactKind::SrcInfo),
"source_pkg_build" => Some(ArtifactKind::SourcePkgBuild),
"source_src_info" => Some(ArtifactKind::SourceSrcInfo),
"krew_plugin_manifest" => Some(ArtifactKind::KrewPluginManifest),
"checksum" => Some(ArtifactKind::Checksum),
"signature" => Some(ArtifactKind::Signature),
"certificate" => Some(ArtifactKind::Certificate),
"sbom" => Some(ArtifactKind::Sbom),
"metadata" => Some(ArtifactKind::Metadata),
"uploadable_file" => Some(ArtifactKind::UploadableFile),
_ => None,
}
}
}
impl serde::Serialize for ArtifactKind {
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
serializer.serialize_str(self.as_str())
}
}
pub fn size_reportable_kinds() -> &'static [ArtifactKind] {
&[
ArtifactKind::Archive,
ArtifactKind::SourceArchive,
ArtifactKind::UploadableFile,
ArtifactKind::Makeself,
ArtifactKind::AppImage,
ArtifactKind::InstallScript,
ArtifactKind::LinuxPackage,
ArtifactKind::Flatpak,
ArtifactKind::SourceRpm,
ArtifactKind::Sbom,
ArtifactKind::Checksum,
ArtifactKind::Signature,
ArtifactKind::Certificate,
ArtifactKind::DiskImage,
ArtifactKind::Installer,
ArtifactKind::MacOsPackage,
ArtifactKind::Snap,
ArtifactKind::PublishableSnapcraft,
ArtifactKind::Binary,
ArtifactKind::UploadableBinary,
ArtifactKind::UniversalBinary,
ArtifactKind::Library,
ArtifactKind::Header,
ArtifactKind::CArchive,
ArtifactKind::CShared,
ArtifactKind::Wasm,
]
}
pub fn uploadable_kinds() -> &'static [ArtifactKind] {
&[
ArtifactKind::Archive,
ArtifactKind::UploadableBinary,
ArtifactKind::SourceArchive,
ArtifactKind::UploadableFile,
ArtifactKind::Makeself,
ArtifactKind::AppImage,
ArtifactKind::InstallScript,
ArtifactKind::LinuxPackage,
ArtifactKind::PublishableSnapcraft,
ArtifactKind::Flatpak,
ArtifactKind::SourceRpm,
ArtifactKind::Sbom,
ArtifactKind::Checksum,
ArtifactKind::Signature,
ArtifactKind::Certificate,
ArtifactKind::DiskImage,
ArtifactKind::Installer,
ArtifactKind::MacOsPackage,
]
}
pub fn release_uploadable_kinds() -> &'static [ArtifactKind] {
&[
ArtifactKind::Archive,
ArtifactKind::UploadableBinary,
ArtifactKind::UploadableFile,
ArtifactKind::SourceArchive,
ArtifactKind::Makeself,
ArtifactKind::AppImage,
ArtifactKind::InstallScript,
ArtifactKind::LinuxPackage,
ArtifactKind::Flatpak,
ArtifactKind::SourceRpm,
ArtifactKind::Installer,
ArtifactKind::DiskImage,
ArtifactKind::MacOsPackage,
ArtifactKind::Sbom,
ArtifactKind::Checksum,
ArtifactKind::Signature,
ArtifactKind::Certificate,
]
}
pub fn primary_subject_kinds() -> &'static [ArtifactKind] {
&[
ArtifactKind::Archive,
ArtifactKind::UploadableBinary,
ArtifactKind::SourceArchive,
ArtifactKind::UploadableFile,
ArtifactKind::Makeself,
ArtifactKind::InstallScript,
ArtifactKind::AppImage,
ArtifactKind::LinuxPackage,
ArtifactKind::Flatpak,
ArtifactKind::SourceRpm,
ArtifactKind::Installer,
ArtifactKind::DiskImage,
ArtifactKind::MacOsPackage,
ArtifactKind::Sbom,
]
}
pub fn checksummable_subject_kinds() -> &'static [ArtifactKind] {
primary_subject_kinds()
}
pub fn signable_subject_kinds() -> &'static [ArtifactKind] {
primary_subject_kinds()
}
pub fn is_derived_sidecar_kind(kind: ArtifactKind) -> bool {
matches!(
kind,
ArtifactKind::Checksum
| ArtifactKind::Signature
| ArtifactKind::Certificate
| ArtifactKind::Metadata
)
}
pub(super) fn is_uploadable(kind: ArtifactKind) -> bool {
uploadable_kinds().contains(&kind)
}