use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct ArtifactDigest {
pub algorithm: String,
pub hex: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ArtifactMetadata {
pub artifact_type: String,
pub digest: ArtifactDigest,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub size: Option<u64>,
}
#[derive(Debug, thiserror::Error)]
pub enum ArtifactError {
#[error("IO error reading artifact: {0}")]
Io(String),
#[error("metadata unavailable: {0}")]
Metadata(String),
}
pub trait ArtifactSource: Send + Sync {
fn digest(&self) -> Result<ArtifactDigest, ArtifactError>;
fn metadata(&self) -> Result<ArtifactMetadata, ArtifactError>;
}