pub mod extensions;
use alloc::string::String;
use alloc::vec::Vec;
use semver::Version;
#[cfg(feature = "schemars")]
use schemars::JsonSchema;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[cfg(feature = "serde")]
use serde_with::serde_as;
#[cfg_attr(feature = "serde", serde_as)]
#[derive(Clone, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct PackRef {
pub oci_url: String,
#[cfg_attr(
feature = "serde",
serde_as(as = "serde_with::formats::DisplayFromStr")
)]
#[cfg_attr(
feature = "schemars",
schemars(with = "String", description = "SemVer version")
)]
pub version: Version,
pub digest: String,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Vec::is_empty")
)]
pub signatures: Vec<Signature>,
}
impl PackRef {
pub fn new(oci_url: impl Into<String>, version: Version, digest: impl Into<String>) -> Self {
Self {
oci_url: oci_url.into(),
version,
digest: digest.into(),
signatures: Vec::new(),
}
}
}
#[cfg_attr(feature = "serde", serde_as)]
#[derive(Clone, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct Signature {
pub key_id: String,
pub algorithm: SignatureAlgorithm,
#[cfg_attr(feature = "serde", serde_as(as = "serde_with::base64::Base64"))]
pub signature: Vec<u8>,
}
impl Signature {
pub fn new(
key_id: impl Into<String>,
algorithm: SignatureAlgorithm,
signature: Vec<u8>,
) -> Self {
Self {
key_id: key_id.into(),
algorithm,
signature,
}
}
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
#[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))]
pub enum SignatureAlgorithm {
Ed25519,
Other(String),
}