use crate::Platform;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase")]
pub struct AwsEnvironmentInfo {
pub account_id: String,
pub region: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase")]
pub struct GcpEnvironmentInfo {
pub project_number: String,
pub project_id: String,
pub region: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase")]
pub struct AzureEnvironmentInfo {
pub tenant_id: String,
pub subscription_id: String,
pub location: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase")]
pub struct LocalEnvironmentInfo {
pub hostname: String,
pub os: String,
pub arch: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase")]
pub struct TestEnvironmentInfo {
pub test_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase", tag = "platform")]
pub enum EnvironmentInfo {
Aws(AwsEnvironmentInfo),
Gcp(GcpEnvironmentInfo),
Azure(AzureEnvironmentInfo),
Local(LocalEnvironmentInfo),
Test(TestEnvironmentInfo),
}
impl EnvironmentInfo {
pub fn platform(&self) -> Platform {
match self {
EnvironmentInfo::Aws(_) => Platform::Aws,
EnvironmentInfo::Gcp(_) => Platform::Gcp,
EnvironmentInfo::Azure(_) => Platform::Azure,
EnvironmentInfo::Local(_) => Platform::Local,
EnvironmentInfo::Test(_) => Platform::Test,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "lowercase")]
pub enum EnvironmentVariableType {
Plain,
Secret,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase")]
pub struct EnvironmentVariable {
pub name: String,
pub value: String,
#[serde(rename = "type")]
pub var_type: EnvironmentVariableType,
#[serde(skip_serializing_if = "Option::is_none")]
pub target_resources: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase")]
pub struct EnvironmentVariablesSnapshot {
pub variables: Vec<EnvironmentVariable>,
pub hash: String,
pub created_at: String,
}