statehub_api/v0/
volume.rs

1//
2// Copyright (c) 2021 RepliXio Ltd. All rights reserved.
3// Use is subject to license terms.
4//
5
6use std::net::Ipv4Addr;
7
8use super::*;
9
10mod impls;
11
12#[derive(Clone, Debug, Serialize, Deserialize)]
13#[serde(rename_all = "camelCase")]
14pub struct Volume {
15    pub id: Uuid,
16    pub name: VolumeName,
17    pub size_gi: u64,
18    pub fs_type: String,
19    pub active_location: Option<String>,
20    pub locations: Vec<VolumeLocation>,
21    pub format: Option<DateTime<Utc>>,
22    pub created: DateTime<Utc>,
23    pub modified: DateTime<Utc>,
24}
25
26#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
27pub enum VolumeBindingMode {
28    WaitForFirstConsumer,
29    Immediate,
30}
31
32#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
33pub struct VolumeName(pub String);
34
35#[skip_serializing_none]
36#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
37pub struct VolumeLocation {
38    pub status: LocationVolumeStatus,
39    pub progress: Option<StateLocationVolumeProgress>,
40    pub name: String,
41    pub iscsi: Option<Iscsi>,
42}
43
44#[skip_serializing_none]
45#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
46pub struct Iscsi {
47    pub iqn: String,
48    pub ipv4: Option<Ipv4Addr>,
49    pub port: Option<u16>,
50    pub chap: Option<Chap>,
51}
52
53#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
54pub struct Chap {
55    pub user: String,
56    pub secret: String,
57}
58
59#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
60#[serde(rename_all = "camelCase")]
61pub struct StateLocationVolumeProgress {
62    pub bytes_synchronized: u64,
63    pub bytes_total: u64,
64}
65
66#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
67pub struct LocationVolumeStatus {
68    pub value: StateLocationStatus,
69    pub msg: Option<String>,
70}
71
72#[derive(Clone, Debug, Serialize, Deserialize)]
73#[serde(rename_all = "camelCase")]
74pub struct CreateVolumeDto {
75    pub name: String,
76    pub size_gi: u64,
77    pub fs_type: String,
78}
79
80#[derive(
81    Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, SerializeDisplay, DeserializeFromStr,
82)]
83pub enum VolumeFileSystem {
84    Ext,
85    Ext2,
86    Ext3,
87    Ext4,
88    Jfs,
89    Swap,
90    Fat,
91    Fat32,
92}
93
94#[derive(
95    Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, SerializeDisplay, DeserializeFromStr,
96)]
97pub enum VolumeStatus {
98    Ok,
99    Degraded,
100    Error,
101    Syncing,
102    Pending,
103}