alien_core/bindings/
artifact_registry.rs1use super::BindingValue;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
8#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
9#[serde(rename_all = "camelCase")]
10pub struct EcrArtifactRegistryBinding {
11 pub repository_prefix: BindingValue<String>,
13 #[serde(default, skip_serializing_if = "Option::is_none")]
16 pub sandbox_repository_prefix: Option<BindingValue<String>>,
17 #[serde(default, skip_serializing_if = "Vec::is_empty")]
20 pub legacy_repository_prefixes: Vec<String>,
21 #[serde(default, skip_serializing_if = "Vec::is_empty")]
23 pub legacy_sandbox_repository_prefixes: Vec<String>,
24 #[serde(default, skip_serializing_if = "Option::is_none")]
26 pub pull_role_arn: Option<BindingValue<String>>,
27 #[serde(default, skip_serializing_if = "Option::is_none")]
29 pub push_role_arn: Option<BindingValue<String>>,
30}
31
32#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
34#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
35#[serde(rename_all = "camelCase")]
36pub struct AcrArtifactRegistryBinding {
37 pub registry_name: BindingValue<String>,
39 pub resource_group_name: BindingValue<String>,
41 #[serde(default, skip_serializing_if = "Option::is_none")]
43 pub repository_prefix: Option<BindingValue<String>>,
44}
45
46#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
48#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
49#[serde(rename_all = "camelCase")]
50pub struct GarArtifactRegistryBinding {
51 pub repository_name: BindingValue<String>,
55 #[serde(default, skip_serializing_if = "Option::is_none")]
57 pub pull_service_account_email: Option<BindingValue<String>>,
58 #[serde(default, skip_serializing_if = "Option::is_none")]
60 pub push_service_account_email: Option<BindingValue<String>>,
61}
62
63#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
69#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
70#[serde(rename_all = "camelCase")]
71pub struct LocalArtifactRegistryBinding {
72 pub registry_url: BindingValue<String>,
74 pub data_dir: BindingValue<Option<String>>,
76}
77
78#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
80#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
81#[serde(tag = "service", rename_all = "lowercase")]
82pub enum ArtifactRegistryBinding {
83 Ecr(EcrArtifactRegistryBinding),
85 Acr(AcrArtifactRegistryBinding),
87 Gar(GarArtifactRegistryBinding),
89 Local(LocalArtifactRegistryBinding),
91}
92
93impl ArtifactRegistryBinding {
94 pub fn ecr(
96 repository_prefix: impl Into<BindingValue<String>>,
97 pull_role_arn: Option<impl Into<BindingValue<String>>>,
98 push_role_arn: Option<impl Into<BindingValue<String>>>,
99 ) -> Self {
100 Self::Ecr(EcrArtifactRegistryBinding {
101 sandbox_repository_prefix: None,
102 legacy_repository_prefixes: Vec::new(),
103 legacy_sandbox_repository_prefixes: Vec::new(),
104 repository_prefix: repository_prefix.into(),
105 pull_role_arn: pull_role_arn.map(|v| v.into()),
106 push_role_arn: push_role_arn.map(|v| v.into()),
107 })
108 }
109
110 pub fn acr(
112 registry_name: impl Into<BindingValue<String>>,
113 resource_group_name: impl Into<BindingValue<String>>,
114 ) -> Self {
115 Self::Acr(AcrArtifactRegistryBinding {
116 registry_name: registry_name.into(),
117 resource_group_name: resource_group_name.into(),
118 repository_prefix: None,
119 })
120 }
121
122 pub fn gar(
124 repository_name: impl Into<BindingValue<String>>,
125 pull_service_account_email: Option<impl Into<BindingValue<String>>>,
126 push_service_account_email: Option<impl Into<BindingValue<String>>>,
127 ) -> Self {
128 Self::Gar(GarArtifactRegistryBinding {
129 repository_name: repository_name.into(),
130 pull_service_account_email: pull_service_account_email.map(|v| v.into()),
131 push_service_account_email: push_service_account_email.map(|v| v.into()),
132 })
133 }
134
135 pub fn local(
137 registry_url: impl Into<BindingValue<String>>,
138 data_dir: impl Into<BindingValue<Option<String>>>,
139 ) -> Self {
140 Self::Local(LocalArtifactRegistryBinding {
141 registry_url: registry_url.into(),
142 data_dir: data_dir.into(),
143 })
144 }
145}