use super::BindingValue;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase")]
pub struct EcrArtifactRegistryBinding {
pub repository_prefix: BindingValue<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub pull_role_arn: Option<BindingValue<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub push_role_arn: Option<BindingValue<String>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase")]
pub struct AcrArtifactRegistryBinding {
pub registry_name: BindingValue<String>,
pub resource_group_name: BindingValue<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub repository_prefix: Option<BindingValue<String>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase")]
pub struct GarArtifactRegistryBinding {
pub repository_name: BindingValue<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub pull_service_account_email: Option<BindingValue<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub push_service_account_email: Option<BindingValue<String>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase")]
pub struct LocalArtifactRegistryBinding {
pub registry_url: BindingValue<String>,
pub data_dir: BindingValue<Option<String>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(tag = "service", rename_all = "lowercase")]
pub enum ArtifactRegistryBinding {
Ecr(EcrArtifactRegistryBinding),
Acr(AcrArtifactRegistryBinding),
Gar(GarArtifactRegistryBinding),
Local(LocalArtifactRegistryBinding),
}
impl ArtifactRegistryBinding {
pub fn ecr(
repository_prefix: impl Into<BindingValue<String>>,
pull_role_arn: Option<impl Into<BindingValue<String>>>,
push_role_arn: Option<impl Into<BindingValue<String>>>,
) -> Self {
Self::Ecr(EcrArtifactRegistryBinding {
repository_prefix: repository_prefix.into(),
pull_role_arn: pull_role_arn.map(|v| v.into()),
push_role_arn: push_role_arn.map(|v| v.into()),
})
}
pub fn acr(
registry_name: impl Into<BindingValue<String>>,
resource_group_name: impl Into<BindingValue<String>>,
) -> Self {
Self::Acr(AcrArtifactRegistryBinding {
registry_name: registry_name.into(),
resource_group_name: resource_group_name.into(),
repository_prefix: None,
})
}
pub fn gar(
repository_name: impl Into<BindingValue<String>>,
pull_service_account_email: Option<impl Into<BindingValue<String>>>,
push_service_account_email: Option<impl Into<BindingValue<String>>>,
) -> Self {
Self::Gar(GarArtifactRegistryBinding {
repository_name: repository_name.into(),
pull_service_account_email: pull_service_account_email.map(|v| v.into()),
push_service_account_email: push_service_account_email.map(|v| v.into()),
})
}
pub fn local(
registry_url: impl Into<BindingValue<String>>,
data_dir: impl Into<BindingValue<Option<String>>>,
) -> Self {
Self::Local(LocalArtifactRegistryBinding {
registry_url: registry_url.into(),
data_dir: data_dir.into(),
})
}
}