1use 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}