chore: Simplify opts using new ImageRef type
This commit is contained in:
parent
0896907c0b
commit
00806b02e1
7 changed files with 153 additions and 78 deletions
|
|
@ -1,4 +1,9 @@
|
|||
use std::{collections::HashMap, env};
|
||||
use std::{
|
||||
borrow::Cow,
|
||||
collections::HashMap,
|
||||
env,
|
||||
path::{Path, PathBuf},
|
||||
};
|
||||
|
||||
use blue_build_utils::{
|
||||
constants::{GITHUB_ACTIONS, GITLAB_CI, IMAGE_VERSION_LABEL},
|
||||
|
|
@ -6,6 +11,7 @@ use blue_build_utils::{
|
|||
};
|
||||
use clap::ValueEnum;
|
||||
use log::trace;
|
||||
use oci_distribution::Reference;
|
||||
use serde::Deserialize;
|
||||
use serde_json::Value;
|
||||
|
||||
|
|
@ -313,3 +319,85 @@ impl TryFrom<std::path::PathBuf> for OciDir {
|
|||
Ok(Self(format!("oci:{}", value.display())))
|
||||
}
|
||||
}
|
||||
|
||||
/// An image ref that could reference
|
||||
/// a remote registry or a local tarball.
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum ImageRef<'scope> {
|
||||
Remote(Cow<'scope, Reference>),
|
||||
LocalTar(Cow<'scope, Path>),
|
||||
}
|
||||
|
||||
impl ImageRef<'_> {
|
||||
#[must_use]
|
||||
pub fn remote_ref(&self) -> Option<&Reference> {
|
||||
match self {
|
||||
Self::Remote(remote) => Some(remote.as_ref()),
|
||||
Self::LocalTar(_) => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'scope> From<&'scope Self> for ImageRef<'scope> {
|
||||
fn from(value: &'scope ImageRef) -> Self {
|
||||
match value {
|
||||
Self::Remote(remote) => Self::Remote(Cow::Borrowed(remote.as_ref())),
|
||||
Self::LocalTar(path) => Self::LocalTar(Cow::Borrowed(path.as_ref())),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'scope> From<&'scope Reference> for ImageRef<'scope> {
|
||||
fn from(value: &'scope Reference) -> Self {
|
||||
Self::Remote(Cow::Borrowed(value))
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Reference> for ImageRef<'_> {
|
||||
fn from(value: Reference) -> Self {
|
||||
Self::Remote(Cow::Owned(value))
|
||||
}
|
||||
}
|
||||
|
||||
impl<'scope> From<&'scope Path> for ImageRef<'scope> {
|
||||
fn from(value: &'scope Path) -> Self {
|
||||
Self::LocalTar(Cow::Borrowed(value))
|
||||
}
|
||||
}
|
||||
|
||||
impl<'scope> From<&'scope PathBuf> for ImageRef<'scope> {
|
||||
fn from(value: &'scope PathBuf) -> Self {
|
||||
Self::from(value.as_path())
|
||||
}
|
||||
}
|
||||
|
||||
impl From<PathBuf> for ImageRef<'_> {
|
||||
fn from(value: PathBuf) -> Self {
|
||||
Self::LocalTar(Cow::Owned(value))
|
||||
}
|
||||
}
|
||||
|
||||
impl From<ImageRef<'_>> for String {
|
||||
fn from(value: ImageRef<'_>) -> Self {
|
||||
Self::from(&value)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<&ImageRef<'_>> for String {
|
||||
fn from(value: &ImageRef<'_>) -> Self {
|
||||
format!("{value}")
|
||||
}
|
||||
}
|
||||
|
||||
impl std::fmt::Display for ImageRef<'_> {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
write!(
|
||||
f,
|
||||
"{}",
|
||||
match self {
|
||||
Self::Remote(remote) => remote.whole(),
|
||||
Self::LocalTar(path) => format!("oci-archive:{}", path.display()),
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue