alien_core/bindings/
artifact_registry.rs1use super::BindingValue;
4use serde::{Deserialize, Serialize};
5
6pub const LEGACY_REPOSITORY_PUSH_REFUSAL: &str =
10 "Repository is under a legacy prefix, which is read-only; push under the current prefix.";
11
12#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
14#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
15#[serde(rename_all = "camelCase")]
16pub struct EcrArtifactRegistryBinding {
17 pub repository_prefix: BindingValue<String>,
19 #[serde(default, skip_serializing_if = "Option::is_none")]
22 pub sandbox_repository_prefix: Option<BindingValue<String>>,
23 #[serde(default, skip_serializing_if = "Vec::is_empty")]
26 pub legacy_repository_prefixes: Vec<String>,
27 #[serde(default, skip_serializing_if = "Vec::is_empty")]
29 pub legacy_sandbox_repository_prefixes: Vec<String>,
30 #[serde(default, skip_serializing_if = "Option::is_none")]
32 pub pull_role_arn: Option<BindingValue<String>>,
33 #[serde(default, skip_serializing_if = "Option::is_none")]
35 pub push_role_arn: Option<BindingValue<String>>,
36}
37
38#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
40#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
41#[serde(rename_all = "camelCase")]
42pub struct AcrArtifactRegistryBinding {
43 pub registry_name: BindingValue<String>,
45 pub resource_group_name: BindingValue<String>,
47 #[serde(default, skip_serializing_if = "Option::is_none")]
49 pub repository_prefix: Option<BindingValue<String>>,
50}
51
52#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
54#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
55#[serde(rename_all = "camelCase")]
56pub struct GarArtifactRegistryBinding {
57 pub repository_name: BindingValue<String>,
61 #[serde(default, skip_serializing_if = "Option::is_none")]
63 pub pull_service_account_email: Option<BindingValue<String>>,
64 #[serde(default, skip_serializing_if = "Option::is_none")]
66 pub push_service_account_email: Option<BindingValue<String>>,
67}
68
69#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
75#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
76#[serde(rename_all = "camelCase")]
77pub struct LocalArtifactRegistryBinding {
78 pub registry_url: BindingValue<String>,
80 pub data_dir: BindingValue<Option<String>>,
82}
83
84#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
86#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
87#[serde(tag = "service", rename_all = "lowercase")]
88pub enum ArtifactRegistryBinding {
89 Ecr(EcrArtifactRegistryBinding),
91 Acr(AcrArtifactRegistryBinding),
93 Gar(GarArtifactRegistryBinding),
95 Local(LocalArtifactRegistryBinding),
97}
98
99impl ArtifactRegistryBinding {
100 pub fn ecr(
102 repository_prefix: impl Into<BindingValue<String>>,
103 pull_role_arn: Option<impl Into<BindingValue<String>>>,
104 push_role_arn: Option<impl Into<BindingValue<String>>>,
105 ) -> Self {
106 Self::Ecr(EcrArtifactRegistryBinding {
107 sandbox_repository_prefix: None,
108 legacy_repository_prefixes: Vec::new(),
109 legacy_sandbox_repository_prefixes: Vec::new(),
110 repository_prefix: repository_prefix.into(),
111 pull_role_arn: pull_role_arn.map(|v| v.into()),
112 push_role_arn: push_role_arn.map(|v| v.into()),
113 })
114 }
115
116 pub fn acr(
118 registry_name: impl Into<BindingValue<String>>,
119 resource_group_name: impl Into<BindingValue<String>>,
120 ) -> Self {
121 Self::Acr(AcrArtifactRegistryBinding {
122 registry_name: registry_name.into(),
123 resource_group_name: resource_group_name.into(),
124 repository_prefix: None,
125 })
126 }
127
128 pub fn gar(
130 repository_name: impl Into<BindingValue<String>>,
131 pull_service_account_email: Option<impl Into<BindingValue<String>>>,
132 push_service_account_email: Option<impl Into<BindingValue<String>>>,
133 ) -> Self {
134 Self::Gar(GarArtifactRegistryBinding {
135 repository_name: repository_name.into(),
136 pull_service_account_email: pull_service_account_email.map(|v| v.into()),
137 push_service_account_email: push_service_account_email.map(|v| v.into()),
138 })
139 }
140
141 pub fn local(
143 registry_url: impl Into<BindingValue<String>>,
144 data_dir: impl Into<BindingValue<Option<String>>>,
145 ) -> Self {
146 Self::Local(LocalArtifactRegistryBinding {
147 registry_url: registry_url.into(),
148 data_dir: data_dir.into(),
149 })
150 }
151}