statehub_api/v0/
state.rs

1//
2// Copyright (c) 2021 RepliXio Ltd. All rights reserved.
3// Use is subject to license terms.
4//
5
6use 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}