linode_api/endpoints/v4/linode_instances/
config_create.rs

1use serde::{Deserialize, Serialize};
2use serde_json::{Map, Value};
3
4use crate::objects::v4::linode_instances::{Config, DiskId};
5
6//
7#[derive(Deserialize, Serialize, Debug, Clone, Default)]
8pub struct RequestBody {
9    pub devices: RequestBodyDevices,
10    pub label: String,
11    pub kernel: Option<String>,
12    #[serde(flatten, skip_serializing_if = "Map::is_empty")]
13    pub _extra: Map<String, Value>,
14}
15
16#[derive(Deserialize, Serialize, Debug, Clone, Default)]
17pub struct RequestBodyDevices {
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub sda: Option<RequestBodyDevicesItem>,
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub sdb: Option<RequestBodyDevicesItem>,
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub sdc: Option<RequestBodyDevicesItem>,
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub sdd: Option<RequestBodyDevicesItem>,
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub sde: Option<RequestBodyDevicesItem>,
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub sdf: Option<RequestBodyDevicesItem>,
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub sdg: Option<RequestBodyDevicesItem>,
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub sdh: Option<RequestBodyDevicesItem>,
34}
35
36#[derive(Deserialize, Serialize, Debug, Clone, Default)]
37pub struct RequestBodyDevicesItem {
38    pub disk_id: Option<DiskId>,
39    pub volume_id: Option<u64>,
40}
41impl RequestBodyDevicesItem {
42    pub fn with_disk_id(disk_id: DiskId) -> Self {
43        Self {
44            disk_id: Some(disk_id),
45            volume_id: None,
46        }
47    }
48}
49
50//
51wrapping_macro::wrapping! {
52    #[derive(Deserialize, Serialize, Debug, Clone)]
53    pub struct ResponseBody(pub Config);
54}
55
56#[cfg(test)]
57mod tests {
58    use super::*;
59
60    #[test]
61    fn test_de_response_body() {
62        match serde_json::from_str::<ResponseBody>(include_str!(
63            "../../../../tests/response_body_files/linode_instances/config_create.json"
64        )) {
65            Ok(json) => {
66                assert_eq!(json.kernel, "linode/latest-64bit");
67            }
68            x => panic!("{x:?}"),
69        }
70    }
71}