sacloud_rs/api/disk/
params.rs

1use crate::enums::EDiskConnection;
2use serde::Serialize;
3
4#[derive(Serialize, Default)]
5#[serde(rename_all = "PascalCase")]
6struct Plan {
7    i_d: usize,
8}
9#[derive(Serialize)]
10#[serde(rename_all = "PascalCase")]
11struct SourceArchive {
12    i_d: usize,
13}
14
15#[derive(Serialize)]
16#[serde(rename_all = "PascalCase")]
17struct SSHKey {
18    public_key: String,
19}
20
21#[derive(Serialize, Default)]
22#[serde(rename_all = "PascalCase")]
23pub struct Config {
24    #[serde(skip_serializing_if = "Option::is_none")]
25    password: Option<String>,
26    s_s_h_key: Option<SSHKey>,
27}
28
29impl Config {
30    pub fn password<S: ToString>(mut self, s: S) -> Self {
31        self.password.replace(s.to_string());
32        self
33    }
34
35    pub fn ssh_key<S: ToString>(mut self, s: S) -> Self {
36        let ssh_key = SSHKey {
37            public_key: s.to_string(),
38        };
39        self.s_s_h_key.replace(ssh_key);
40        self
41    }
42}
43
44#[derive(Serialize, Default)]
45#[serde(rename_all = "PascalCase")]
46pub struct Disk {
47    name: String,
48    plan: Plan,
49    #[serde(skip_serializing_if = "Option::is_none")]
50    connection: Option<String>,
51    #[serde(skip_serializing_if = "Option::is_none")]
52    // TOCONFIRM: without this optional field as described from the api doc,
53    // creating disk will fails.
54    size_m_b: Option<usize>,
55    #[serde(skip_serializing_if = "Option::is_none")]
56    source_archive: Option<SourceArchive>,
57}
58
59impl Disk {
60    pub fn name<S: ToString>(mut self, s: S) -> Self {
61        self.name = s.to_string();
62        self
63    }
64
65    pub fn plan(mut self, id: usize) -> Self {
66        self.plan = Plan { i_d: id };
67        self
68    }
69
70    pub fn connection(mut self, connection: EDiskConnection) -> Self {
71        self.connection.replace(connection.as_str().to_string());
72        self
73    }
74
75    pub fn size_m_b(mut self, size_mb: usize) -> Self {
76        self.size_m_b.replace(size_mb);
77        self
78    }
79
80    pub fn source_archive_id(mut self, id: usize) -> Self {
81        self.source_archive.replace(SourceArchive { i_d: id });
82        self
83    }
84}
85
86#[derive(Serialize, Default)]
87#[serde(rename_all = "PascalCase")]
88pub struct Params {
89    disk: Disk,
90}
91
92impl Params {
93    pub fn disk(mut self, disk: Disk) -> Self {
94        self.disk = disk;
95        self
96    }
97}