1use super::*;
7
8mod impls;
9
10#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
11#[serde(rename_all = "camelCase")]
12pub struct State {
13 pub id: Uuid,
14 pub name: StateName,
15 pub created: DateTime<Utc>,
16 pub modified: DateTime<Utc>,
17 pub storage_class: Option<StorageClass>,
18 #[serde(default)]
19 pub locations: StateLocations,
20 pub owner: Option<ClusterName>,
21 pub provisioning_status: ProvisioningStatus,
22 pub allowed_clusters: Option<Vec<ClusterName>>,
23 pub condition: Condition,
24}
25
26#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, Hash)]
27pub struct StateName(pub String);
28
29#[derive(Clone, Debug, Serialize, Deserialize)]
30#[serde(rename_all = "camelCase")]
31pub struct CreateStateDto {
32 pub name: StateName,
33 pub storage_class: Option<StorageClass>,
34 pub locations: CreateStateLocationsDto,
35 pub owner: Option<ClusterName>,
36 pub allowed_clusters: Option<Vec<ClusterName>>,
37}
38
39#[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash)]
40#[serde(rename_all = "lowercase")]
41pub enum ProvisioningStatus {
42 Ready,
43 Provisioning,
44 Error,
45}
46
47#[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash)]
48#[serde(rename_all = "lowercase")]
49pub enum Condition {
50 Green,
51 Yellow,
52 Red,
53}
54
55#[derive(Clone, Debug, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
56pub struct StateLocations {
57 #[serde(default)]
58 pub aws: Vec<StateLocationAws>,
59 #[serde(default)]
60 pub azure: Vec<StateLocationAzure>,
61}
62
63#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
64#[serde(rename_all = "camelCase")]
65pub struct StateLocationAzure {
66 pub region: AzureRegion,
67 pub status: StateLocationStatus,
68 pub volumes: Vec<VolumeLocation>,
69 pub private_link_service: Option<PrivateLinkServiceAzure>,
70}
71
72#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
73#[serde(rename_all = "camelCase")]
74pub struct StateLocationAws {
75 pub region: AwsRegion,
76 pub status: StateLocationStatus,
77 pub volumes: Vec<VolumeLocation>,
78 pub private_link_service: Option<PrivateLinkServiceAws>,
79}
80
81#[derive(Clone, Debug, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
82#[serde(rename_all = "camelCase")]
83pub struct StorageClass {
84 pub name: String,
85 pub volume_binding_mode: VolumeBindingMode,
86 pub fs_type: String,
87 pub mount_options: Option<String>,
88}
89
90#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
91#[serde(rename_all = "lowercase")]
92pub enum StateLocationStatus {
93 Ok,
94 Provisioning,
95 Recovering,
96 Deleting,
97 Error,
98}
99
100#[derive(Clone, Debug, Default, Serialize, Deserialize)]
101pub struct CreateStateLocationsDto {
102 pub aws: Vec<CreateStateLocationAwsDto>,
103 pub azure: Vec<CreateStateLocationAzureDto>,
104}
105
106#[derive(Clone, Debug, Serialize, Deserialize)]
107pub struct CreateStateLocationAwsDto {
108 pub region: AwsRegion,
109}
110
111#[derive(Clone, Debug, Serialize, Deserialize)]
112pub struct CreateStateLocationAzureDto {
113 pub region: AzureRegion,
114}