1use crate::Platform;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
8#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
9#[serde(rename_all = "camelCase")]
10pub struct AwsEnvironmentInfo {
11 pub account_id: String,
13 pub region: String,
15}
16
17#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
19#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
20#[serde(rename_all = "camelCase")]
21pub struct GcpEnvironmentInfo {
22 pub project_number: String,
24 pub project_id: String,
26 pub region: String,
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
32#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
33#[serde(rename_all = "camelCase")]
34pub struct AzureEnvironmentInfo {
35 pub tenant_id: String,
37 pub subscription_id: String,
39 pub location: String,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
45#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
46#[serde(rename_all = "camelCase")]
47pub struct LocalEnvironmentInfo {
48 pub hostname: String,
50 pub os: String,
52 pub arch: String,
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
58#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
59#[serde(rename_all = "camelCase")]
60pub struct TestEnvironmentInfo {
61 pub test_id: String,
63}
64
65#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
67#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
68#[serde(rename_all = "camelCase", tag = "platform")]
69pub enum EnvironmentInfo {
70 Aws(AwsEnvironmentInfo),
72 Gcp(GcpEnvironmentInfo),
74 Azure(AzureEnvironmentInfo),
76 Local(LocalEnvironmentInfo),
78 Test(TestEnvironmentInfo),
80}
81
82impl EnvironmentInfo {
83 pub fn platform(&self) -> Platform {
85 match self {
86 EnvironmentInfo::Aws(_) => Platform::Aws,
87 EnvironmentInfo::Gcp(_) => Platform::Gcp,
88 EnvironmentInfo::Azure(_) => Platform::Azure,
89 EnvironmentInfo::Local(_) => Platform::Local,
90 EnvironmentInfo::Test(_) => Platform::Test,
91 }
92 }
93}
94
95#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
97#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
98#[serde(rename_all = "lowercase")]
99pub enum EnvironmentVariableType {
100 Plain,
102 Secret,
104}
105
106#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
108#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
109#[serde(rename_all = "camelCase")]
110pub struct EnvironmentVariable {
111 pub name: String,
113 pub value: String,
115 #[serde(rename = "type")]
117 pub var_type: EnvironmentVariableType,
118 #[serde(skip_serializing_if = "Option::is_none")]
120 pub target_resources: Option<Vec<String>>,
121}
122
123#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
125#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
126#[serde(rename_all = "camelCase")]
127pub struct EnvironmentVariablesSnapshot {
128 pub variables: Vec<EnvironmentVariable>,
130 pub hash: String,
132 pub created_at: String,
134}