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")]
15 pub pull_role_arn: Option<BindingValue<String>>,
16 #[serde(default, skip_serializing_if = "Option::is_none")]
18 pub push_role_arn: Option<BindingValue<String>>,
19}
20
21#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
23#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
24#[serde(rename_all = "camelCase")]
25pub struct AcrArtifactRegistryBinding {
26 pub registry_name: BindingValue<String>,
28 pub resource_group_name: BindingValue<String>,
30 #[serde(default, skip_serializing_if = "Option::is_none")]
32 pub repository_prefix: Option<BindingValue<String>>,
33}
34
35#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
37#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
38#[serde(rename_all = "camelCase")]
39pub struct GarArtifactRegistryBinding {
40 pub repository_name: BindingValue<String>,
44 #[serde(default, skip_serializing_if = "Option::is_none")]
46 pub pull_service_account_email: Option<BindingValue<String>>,
47 #[serde(default, skip_serializing_if = "Option::is_none")]
49 pub push_service_account_email: Option<BindingValue<String>>,
50}
51
52#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
58#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
59#[serde(rename_all = "camelCase")]
60pub struct LocalArtifactRegistryBinding {
61 pub registry_url: BindingValue<String>,
63 pub data_dir: BindingValue<Option<String>>,
65}
66
67#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
69#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
70#[serde(tag = "service", rename_all = "lowercase")]
71pub enum ArtifactRegistryBinding {
72 Ecr(EcrArtifactRegistryBinding),
74 Acr(AcrArtifactRegistryBinding),
76 Gar(GarArtifactRegistryBinding),
78 Local(LocalArtifactRegistryBinding),
80}
81
82impl ArtifactRegistryBinding {
83 pub fn ecr(
85 repository_prefix: impl Into<BindingValue<String>>,
86 pull_role_arn: Option<impl Into<BindingValue<String>>>,
87 push_role_arn: Option<impl Into<BindingValue<String>>>,
88 ) -> Self {
89 Self::Ecr(EcrArtifactRegistryBinding {
90 repository_prefix: repository_prefix.into(),
91 pull_role_arn: pull_role_arn.map(|v| v.into()),
92 push_role_arn: push_role_arn.map(|v| v.into()),
93 })
94 }
95
96 pub fn acr(
98 registry_name: impl Into<BindingValue<String>>,
99 resource_group_name: impl Into<BindingValue<String>>,
100 ) -> Self {
101 Self::Acr(AcrArtifactRegistryBinding {
102 registry_name: registry_name.into(),
103 resource_group_name: resource_group_name.into(),
104 repository_prefix: None,
105 })
106 }
107
108 pub fn gar(
110 repository_name: impl Into<BindingValue<String>>,
111 pull_service_account_email: Option<impl Into<BindingValue<String>>>,
112 push_service_account_email: Option<impl Into<BindingValue<String>>>,
113 ) -> Self {
114 Self::Gar(GarArtifactRegistryBinding {
115 repository_name: repository_name.into(),
116 pull_service_account_email: pull_service_account_email.map(|v| v.into()),
117 push_service_account_email: push_service_account_email.map(|v| v.into()),
118 })
119 }
120
121 pub fn local(
123 registry_url: impl Into<BindingValue<String>>,
124 data_dir: impl Into<BindingValue<Option<String>>>,
125 ) -> Self {
126 Self::Local(LocalArtifactRegistryBinding {
127 registry_url: registry_url.into(),
128 data_dir: data_dir.into(),
129 })
130 }
131}