1pub mod extensions;
4
5use alloc::string::String;
6use alloc::vec::Vec;
7
8use semver::Version;
9
10#[cfg(feature = "schemars")]
11use schemars::JsonSchema;
12#[cfg(feature = "serde")]
13use serde::{Deserialize, Serialize};
14#[cfg(feature = "serde")]
15use serde_with::serde_as;
16
17#[cfg_attr(feature = "serde", serde_as)]
19#[derive(Clone, Debug, PartialEq, Eq)]
20#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
21#[cfg_attr(feature = "schemars", derive(JsonSchema))]
22pub struct PackRef {
23 pub oci_url: String,
25 #[cfg_attr(
27 feature = "serde",
28 serde_as(as = "serde_with::formats::DisplayFromStr")
29 )]
30 #[cfg_attr(
31 feature = "schemars",
32 schemars(with = "String", description = "SemVer version")
33 )]
34 pub version: Version,
35 pub digest: String,
37 #[cfg_attr(
39 feature = "serde",
40 serde(default, skip_serializing_if = "Vec::is_empty")
41 )]
42 pub signatures: Vec<Signature>,
43}
44
45impl PackRef {
46 pub fn new(oci_url: impl Into<String>, version: Version, digest: impl Into<String>) -> Self {
48 Self {
49 oci_url: oci_url.into(),
50 version,
51 digest: digest.into(),
52 signatures: Vec::new(),
53 }
54 }
55}
56
57#[cfg_attr(feature = "serde", serde_as)]
59#[derive(Clone, Debug, PartialEq, Eq)]
60#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
61#[cfg_attr(feature = "schemars", derive(JsonSchema))]
62pub struct Signature {
63 pub key_id: String,
65 pub algorithm: SignatureAlgorithm,
67 #[cfg_attr(feature = "serde", serde_as(as = "serde_with::base64::Base64"))]
69 pub signature: Vec<u8>,
70}
71
72impl Signature {
73 pub fn new(
75 key_id: impl Into<String>,
76 algorithm: SignatureAlgorithm,
77 signature: Vec<u8>,
78 ) -> Self {
79 Self {
80 key_id: key_id.into(),
81 algorithm,
82 signature,
83 }
84 }
85}
86
87#[derive(Clone, Debug, PartialEq, Eq, Hash)]
89#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
90#[cfg_attr(feature = "schemars", derive(JsonSchema))]
91#[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))]
92pub enum SignatureAlgorithm {
93 Ed25519,
95 Other(String),
97}