1use crate::error::OciSpecError;
2use derive_builder::Builder;
3use getset::{CopyGetters, Getters, Setters};
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6
7#[derive(
8    Builder,
9    Clone,
10    Debug,
11    Default,
12    Deserialize,
13    Eq,
14    CopyGetters,
15    Getters,
16    Setters,
17    PartialEq,
18    Serialize,
19)]
20#[serde(rename_all = "camelCase")]
21#[builder(
22    default,
23    pattern = "owned",
24    setter(into, strip_option),
25    build_fn(error = "OciSpecError")
26)]
27pub struct Windows {
30    #[serde(default, skip_serializing_if = "Option::is_none")]
31    #[getset(get = "pub", set = "pub")]
32    layer_folders: Option<Vec<String>>,
35
36    #[serde(default, skip_serializing_if = "Option::is_none")]
37    #[getset(get = "pub", set = "pub")]
38    devices: Option<Vec<WindowsDevice>>,
40
41    #[serde(default, skip_serializing_if = "Option::is_none")]
42    #[getset(get_copy = "pub", set = "pub")]
43    resources: Option<WindowsResources>,
46
47    #[serde(default, skip_serializing_if = "Option::is_none")]
48    #[getset(get = "pub", set = "pub")]
49    credential_spec: Option<HashMap<String, Option<serde_json::Value>>>,
52
53    #[serde(default, skip_serializing_if = "Option::is_none")]
54    #[getset(get_copy = "pub", set = "pub")]
55    servicing: Option<bool>,
58
59    #[serde(default, skip_serializing_if = "Option::is_none")]
60    #[getset(get_copy = "pub", set = "pub")]
61    ignore_flushes_during_boot: Option<bool>,
65
66    #[serde(default, skip_serializing_if = "Option::is_none")]
67    #[getset(get = "pub", set = "pub")]
68    hyperv: Option<WindowsHyperV>,
71
72    #[serde(default, skip_serializing_if = "Option::is_none")]
73    #[getset(get = "pub", set = "pub")]
74    network: Option<WindowsNetwork>,
76}
77
78#[derive(
79    Builder, Clone, Debug, Default, Deserialize, Eq, Getters, Setters, PartialEq, Serialize,
80)]
81#[serde(rename_all = "camelCase")]
82#[builder(
83    default,
84    pattern = "owned",
85    setter(into, strip_option),
86    build_fn(error = "OciSpecError")
87)]
88#[getset(get = "pub", set = "pub")]
89pub struct WindowsDevice {
92    id: String,
94
95    id_type: String,
97}
98
99#[derive(
100    Builder, Clone, Copy, Debug, Default, Deserialize, Eq, Getters, Setters, PartialEq, Serialize,
101)]
102#[builder(
103    default,
104    pattern = "owned",
105    setter(into, strip_option),
106    build_fn(error = "OciSpecError")
107)]
108#[getset(get_copy = "pub", set = "pub")]
109pub struct WindowsResources {
111    #[serde(default, skip_serializing_if = "Option::is_none")]
112    memory: Option<WindowsMemoryResources>,
114
115    #[serde(default, skip_serializing_if = "Option::is_none")]
116    cpu: Option<WindowsCPUResources>,
118
119    #[serde(default, skip_serializing_if = "Option::is_none")]
120    storage: Option<WindowsStorageResources>,
122}
123
124#[derive(
125    Builder, Clone, Copy, Debug, Default, Deserialize, Eq, Getters, Setters, PartialEq, Serialize,
126)]
127#[builder(
128    default,
129    pattern = "owned",
130    setter(into, strip_option),
131    build_fn(error = "OciSpecError")
132)]
133#[getset(get_copy = "pub", set = "pub")]
134pub struct WindowsMemoryResources {
136    #[serde(default, skip_serializing_if = "Option::is_none")]
137    limit: Option<u64>,
139}
140
141#[derive(
142    Builder, Clone, Copy, Debug, Default, Deserialize, Eq, Getters, Setters, PartialEq, Serialize,
143)]
144#[builder(
145    default,
146    pattern = "owned",
147    setter(into, strip_option),
148    build_fn(error = "OciSpecError")
149)]
150#[getset(get_copy = "pub", set = "pub")]
151pub struct WindowsCPUResources {
153    #[serde(default, skip_serializing_if = "Option::is_none")]
154    count: Option<u64>,
156
157    #[serde(default, skip_serializing_if = "Option::is_none")]
158    shares: Option<u16>,
160
161    #[serde(default, skip_serializing_if = "Option::is_none")]
162    maximum: Option<u16>,
165}
166
167#[derive(
168    Builder, Clone, Copy, Debug, Default, Deserialize, Eq, Getters, Setters, PartialEq, Serialize,
169)]
170#[serde(rename_all = "camelCase")]
171#[builder(
172    default,
173    pattern = "owned",
174    setter(into, strip_option),
175    build_fn(error = "OciSpecError")
176)]
177#[getset(get_copy = "pub", set = "pub")]
178pub struct WindowsStorageResources {
180    #[serde(default, skip_serializing_if = "Option::is_none")]
181    iops: Option<u64>,
183
184    #[serde(default, skip_serializing_if = "Option::is_none")]
185    bps: Option<u64>,
187
188    #[serde(default, skip_serializing_if = "Option::is_none")]
189    sandbox_size: Option<u64>,
192}
193
194#[derive(
195    Builder, Clone, Debug, Default, Deserialize, Eq, Getters, Setters, PartialEq, Serialize,
196)]
197#[serde(rename_all = "camelCase")]
198#[builder(
199    default,
200    pattern = "owned",
201    setter(into, strip_option),
202    build_fn(error = "OciSpecError")
203)]
204#[getset(get = "pub", set = "pub")]
205pub struct WindowsHyperV {
208    #[serde(default, skip_serializing_if = "Option::is_none")]
209    utility_vm_path: Option<String>,
212}
213
214#[derive(
215    Builder, Clone, Debug, Default, Deserialize, Eq, Getters, Setters, PartialEq, Serialize,
216)]
217#[serde(rename_all = "camelCase")]
218#[builder(
219    default,
220    pattern = "owned",
221    setter(into, strip_option),
222    build_fn(error = "OciSpecError")
223)]
224pub struct WindowsNetwork {
226    #[serde(default, skip_serializing_if = "Option::is_none")]
227    #[getset(get = "pub", set = "pub")]
228    endpoint_list: Option<Vec<String>>,
230
231    #[serde(
232        default,
233        skip_serializing_if = "Option::is_none",
234        rename = "allowUnqualifiedDNSQuery"
235    )]
236    #[getset(get_copy = "pub", set = "pub")]
237    allow_unqualified_dns_query: Option<bool>,
239
240    #[serde(
241        default,
242        skip_serializing_if = "Option::is_none",
243        rename = "DNSSearchList"
244    )]
245    #[getset(get = "pub", set = "pub")]
246    dns_search_list: Option<Vec<String>>,
248
249    #[serde(default, skip_serializing_if = "Option::is_none")]
250    #[getset(get = "pub", set = "pub")]
251    network_shared_container_name: Option<String>,
254
255    #[serde(default, skip_serializing_if = "Option::is_none")]
256    #[getset(get = "pub", set = "pub")]
257    network_namespace: Option<String>,
260}