use super::BindingValue;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(tag = "service", rename_all = "lowercase")]
pub enum ServiceAccountBinding {
AwsIam(AwsServiceAccountBinding),
GcpServiceAccount(GcpServiceAccountBinding),
AzureManagedIdentity(AzureServiceAccountBinding),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AwsServiceAccountBinding {
pub role_name: BindingValue<String>,
pub role_arn: BindingValue<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GcpServiceAccountBinding {
pub email: BindingValue<String>,
pub unique_id: BindingValue<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AzureServiceAccountBinding {
pub client_id: BindingValue<String>,
pub resource_id: BindingValue<String>,
pub principal_id: BindingValue<String>,
}
impl ServiceAccountBinding {
pub fn aws_iam(
role_name: impl Into<BindingValue<String>>,
role_arn: impl Into<BindingValue<String>>,
) -> Self {
Self::AwsIam(AwsServiceAccountBinding {
role_name: role_name.into(),
role_arn: role_arn.into(),
})
}
pub fn gcp_service_account(
email: impl Into<BindingValue<String>>,
unique_id: impl Into<BindingValue<String>>,
) -> Self {
Self::GcpServiceAccount(GcpServiceAccountBinding {
email: email.into(),
unique_id: unique_id.into(),
})
}
pub fn azure_managed_identity(
client_id: impl Into<BindingValue<String>>,
resource_id: impl Into<BindingValue<String>>,
principal_id: impl Into<BindingValue<String>>,
) -> Self {
Self::AzureManagedIdentity(AzureServiceAccountBinding {
client_id: client_id.into(),
resource_id: resource_id.into(),
principal_id: principal_id.into(),
})
}
}