use crate::errors::SigstoreError;
use std::fmt::{Display, Formatter};
use std::str::FromStr;
#[derive(Debug, Clone, PartialEq)]
pub struct OciReference {
pub(crate) oci_reference: oci_client::Reference,
}
impl FromStr for OciReference {
type Err = SigstoreError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
s.parse::<oci_client::Reference>()
.map_err(|_| SigstoreError::OciReferenceNotValidError {
reference: s.to_string(),
})
.map(|oci_reference| OciReference { oci_reference })
}
}
impl OciReference {
pub fn with_tag(registry: String, repository: String, tag: String) -> Self {
OciReference {
oci_reference: oci_client::Reference::with_tag(registry, repository, tag),
}
}
pub fn with_digest(registry: String, repository: String, digest: String) -> Self {
OciReference {
oci_reference: oci_client::Reference::with_digest(registry, repository, digest),
}
}
pub fn resolve_registry(&self) -> &str {
self.oci_reference.resolve_registry()
}
pub fn registry(&self) -> &str {
self.oci_reference.registry()
}
pub fn repository(&self) -> &str {
self.oci_reference.repository()
}
pub fn digest(&self) -> Option<&str> {
self.oci_reference.digest()
}
pub fn tag(&self) -> Option<&str> {
self.oci_reference.tag()
}
pub fn whole(&self) -> String {
self.oci_reference.whole()
}
}
impl Display for OciReference {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
self.oci_reference.fmt(f)
}
}