linode_api/endpoints/v4/linode_instances/
config_create.rs1use serde::{Deserialize, Serialize};
2use serde_json::{Map, Value};
3
4use crate::objects::v4::linode_instances::{Config, DiskId};
5
6#[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
50wrapping_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}