use crate::containerization_oci::Content;
use crate::containerization_oci::Descriptor;
use crate::error::Error;
use crate::platform;
use crate::platform::ffi;
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct Description {
pub reference: String,
pub descriptor: Descriptor,
}
impl Description {
pub fn new(reference: impl Into<String>, descriptor: Descriptor) -> Self {
Self {
reference: reference.into(),
descriptor,
}
}
pub fn digest(&self) -> &str {
&self.descriptor.digest
}
pub fn media_type(&self) -> &str {
&self.descriptor.media_type
}
}
pub struct Image {
pub(crate) handle: ffi::CzImage,
}
unsafe impl Send for Image {}
unsafe impl Sync for Image {}
impl Image {
pub fn reference(&self) -> String {
self.handle.reference()
}
pub fn digest(&self) -> String {
self.handle.digest()
}
pub fn media_type(&self) -> String {
self.handle.media_type()
}
pub fn referenced_digests(&self) -> Result<Vec<String>, Error> {
platform::outcome(
self.handle.referenced_digests(),
format!("list what {} is made of", self.reference()),
)
.map(|outcome| outcome.strings())
}
pub fn get_content(&self, digest: &str) -> Result<Content, Error> {
platform::outcome(
self.handle.get_content(digest),
format!("get {digest} from {}", self.reference()),
)
.map(|outcome| Content {
handle: outcome.content(),
})
}
}