use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use super::manifest_schema2::ManifestObj;
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct OciDescriptor {
#[serde(rename = "mediaType")]
pub media_type: String,
pub size: u64,
pub digest: String,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct OciImageIndex {
#[serde(rename = "schemaVersion")]
schema_version: u16,
#[serde(rename = "mediaType", default)]
media_type: String,
#[serde(rename = "artifactType", default)]
artifact_type: Option<String>,
pub manifests: Vec<ManifestObj>,
subject: Option<OciDescriptor>,
annotations: Option<HashMap<String, String>>,
}
impl OciImageIndex {
pub fn artifact_type(&self) -> Option<&str> {
self.artifact_type.as_deref()
}
pub fn subject(&self) -> Option<&OciDescriptor> {
self.subject.as_ref()
}
pub fn annotations(&self) -> Option<&HashMap<String, String>> {
self.annotations.as_ref()
}
pub fn architectures(&self) -> Vec<String> {
self.manifests.iter().map(|mo| mo.architecture()).collect()
}
pub fn get_digests(&self) -> Vec<String> {
self.manifests.iter().map(|mo| mo.digest()).collect()
}
}