1pub mod vmid;
2#[derive(Debug, Clone)]
3pub struct LxcClient<T> {
4 client: T,
5 path: String,
6}
7impl<T> LxcClient<T>
8where
9 T: crate::client::Client,
10{
11 pub fn new(client: T, parent_path: &str) -> Self {
12 Self {
13 client,
14 path: format!("{}{}", parent_path, "/lxc"),
15 }
16 }
17}
18impl<T> LxcClient<T>
19where
20 T: crate::client::Client,
21{
22 #[doc = "LXC container index (per node)."]
23 #[doc = ""]
24 #[doc = "Only list CTs where you have VM.Audit permission on /vms/\\<vmid\\>."]
25 pub async fn get(&self) -> Result<Vec<GetOutputItems>, T::Error> {
26 let path = self.path.to_string();
27 let optional_vec: Option<Vec<GetOutputItems>> = self.client.get(&path, &()).await?;
28 Ok(optional_vec.unwrap_or_default())
29 }
30}
31impl<T> LxcClient<T>
32where
33 T: crate::client::Client,
34{
35 #[doc = "Create or restore a container."]
36 #[doc = ""]
37 #[doc = "You need 'VM.Allocate' permission on /vms/{vmid} or on the VM pool /pool/{pool}. For restore, it is enough if the user has 'VM.Backup' permission and the VM already exists. You also need 'Datastore.AllocateSpace' permissions on the storage. For privileged containers, 'Sys.Modify' permissions on '/' are required."]
38 pub async fn post(&self, params: PostParams) -> Result<String, T::Error> {
39 let path = self.path.to_string();
40 self.client.post(&path, ¶ms).await
41 }
42}
43impl GetOutputItems {
44 pub fn new(status: Status, vmid: VmidInt) -> Self {
45 Self {
46 status,
47 vmid,
48 cpu: ::std::default::Default::default(),
49 cpus: ::std::default::Default::default(),
50 disk: ::std::default::Default::default(),
51 diskread: ::std::default::Default::default(),
52 diskwrite: ::std::default::Default::default(),
53 lock: ::std::default::Default::default(),
54 maxdisk: ::std::default::Default::default(),
55 maxmem: ::std::default::Default::default(),
56 maxswap: ::std::default::Default::default(),
57 mem: ::std::default::Default::default(),
58 name: ::std::default::Default::default(),
59 netin: ::std::default::Default::default(),
60 netout: ::std::default::Default::default(),
61 pressurecpusome: ::std::default::Default::default(),
62 pressureiofull: ::std::default::Default::default(),
63 pressureiosome: ::std::default::Default::default(),
64 pressurememoryfull: ::std::default::Default::default(),
65 pressurememorysome: ::std::default::Default::default(),
66 tags: ::std::default::Default::default(),
67 template: ::std::default::Default::default(),
68 uptime: ::std::default::Default::default(),
69 additional_properties: ::std::default::Default::default(),
70 }
71 }
72}
73#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize)]
74pub struct GetOutputItems {
75 #[serde(
76 serialize_with = "crate::types::serialize_number_optional",
77 deserialize_with = "crate::types::deserialize_number_optional"
78 )]
79 #[serde(skip_serializing_if = "Option::is_none", default)]
80 #[doc = "Current CPU usage."]
81 #[doc = ""]
82 pub cpu: Option<f64>,
83 #[serde(
84 serialize_with = "crate::types::serialize_number_optional",
85 deserialize_with = "crate::types::deserialize_number_optional"
86 )]
87 #[serde(skip_serializing_if = "Option::is_none", default)]
88 #[doc = "Maximum usable CPUs."]
89 #[doc = ""]
90 pub cpus: Option<f64>,
91 #[serde(
92 serialize_with = "crate::types::serialize_unsigned_int_optional",
93 deserialize_with = "crate::types::deserialize_unsigned_int_optional"
94 )]
95 #[serde(skip_serializing_if = "Option::is_none", default)]
96 #[doc = "Root disk image space-usage in bytes."]
97 #[doc = ""]
98 pub disk: Option<u64>,
99 #[serde(
100 serialize_with = "crate::types::serialize_int_optional",
101 deserialize_with = "crate::types::deserialize_int_optional"
102 )]
103 #[serde(skip_serializing_if = "Option::is_none", default)]
104 #[doc = "The amount of bytes the guest read from it's block devices since the guest was started. (Note: This info is not available for all storage types.)"]
105 #[doc = ""]
106 pub diskread: Option<i64>,
107 #[serde(
108 serialize_with = "crate::types::serialize_int_optional",
109 deserialize_with = "crate::types::deserialize_int_optional"
110 )]
111 #[serde(skip_serializing_if = "Option::is_none", default)]
112 #[doc = "The amount of bytes the guest wrote from it's block devices since the guest was started. (Note: This info is not available for all storage types.)"]
113 #[doc = ""]
114 pub diskwrite: Option<i64>,
115 #[serde(skip_serializing_if = "Option::is_none", default)]
116 #[doc = "The current config lock, if any."]
117 #[doc = ""]
118 pub lock: Option<String>,
119 #[serde(
120 serialize_with = "crate::types::serialize_int_optional",
121 deserialize_with = "crate::types::deserialize_int_optional"
122 )]
123 #[serde(skip_serializing_if = "Option::is_none", default)]
124 #[doc = "Root disk image size in bytes."]
125 #[doc = ""]
126 pub maxdisk: Option<i64>,
127 #[serde(
128 serialize_with = "crate::types::serialize_int_optional",
129 deserialize_with = "crate::types::deserialize_int_optional"
130 )]
131 #[serde(skip_serializing_if = "Option::is_none", default)]
132 #[doc = "Maximum memory in bytes."]
133 #[doc = ""]
134 pub maxmem: Option<i64>,
135 #[serde(
136 serialize_with = "crate::types::serialize_int_optional",
137 deserialize_with = "crate::types::deserialize_int_optional"
138 )]
139 #[serde(skip_serializing_if = "Option::is_none", default)]
140 #[doc = "Maximum SWAP memory in bytes."]
141 #[doc = ""]
142 pub maxswap: Option<i64>,
143 #[serde(
144 serialize_with = "crate::types::serialize_int_optional",
145 deserialize_with = "crate::types::deserialize_int_optional"
146 )]
147 #[serde(skip_serializing_if = "Option::is_none", default)]
148 #[doc = "Currently used memory in bytes."]
149 #[doc = ""]
150 pub mem: Option<i64>,
151 #[serde(skip_serializing_if = "Option::is_none", default)]
152 #[doc = "Container name."]
153 #[doc = ""]
154 pub name: Option<String>,
155 #[serde(
156 serialize_with = "crate::types::serialize_int_optional",
157 deserialize_with = "crate::types::deserialize_int_optional"
158 )]
159 #[serde(skip_serializing_if = "Option::is_none", default)]
160 #[doc = "The amount of traffic in bytes that was sent to the guest over the network since it was started."]
161 #[doc = ""]
162 pub netin: Option<i64>,
163 #[serde(
164 serialize_with = "crate::types::serialize_int_optional",
165 deserialize_with = "crate::types::deserialize_int_optional"
166 )]
167 #[serde(skip_serializing_if = "Option::is_none", default)]
168 #[doc = "The amount of traffic in bytes that was sent from the guest over the network since it was started."]
169 #[doc = ""]
170 pub netout: Option<i64>,
171 #[serde(
172 serialize_with = "crate::types::serialize_number_optional",
173 deserialize_with = "crate::types::deserialize_number_optional"
174 )]
175 #[serde(skip_serializing_if = "Option::is_none", default)]
176 #[doc = "CPU Some pressure stall average over the last 10 seconds."]
177 #[doc = ""]
178 pub pressurecpusome: Option<f64>,
179 #[serde(
180 serialize_with = "crate::types::serialize_number_optional",
181 deserialize_with = "crate::types::deserialize_number_optional"
182 )]
183 #[serde(skip_serializing_if = "Option::is_none", default)]
184 #[doc = "IO Full pressure stall average over the last 10 seconds."]
185 #[doc = ""]
186 pub pressureiofull: Option<f64>,
187 #[serde(
188 serialize_with = "crate::types::serialize_number_optional",
189 deserialize_with = "crate::types::deserialize_number_optional"
190 )]
191 #[serde(skip_serializing_if = "Option::is_none", default)]
192 #[doc = "IO Some pressure stall average over the last 10 seconds."]
193 #[doc = ""]
194 pub pressureiosome: Option<f64>,
195 #[serde(
196 serialize_with = "crate::types::serialize_number_optional",
197 deserialize_with = "crate::types::deserialize_number_optional"
198 )]
199 #[serde(skip_serializing_if = "Option::is_none", default)]
200 #[doc = "Memory Full pressure stall average over the last 10 seconds."]
201 #[doc = ""]
202 pub pressurememoryfull: Option<f64>,
203 #[serde(
204 serialize_with = "crate::types::serialize_number_optional",
205 deserialize_with = "crate::types::deserialize_number_optional"
206 )]
207 #[serde(skip_serializing_if = "Option::is_none", default)]
208 #[doc = "Memory Some pressure stall average over the last 10 seconds."]
209 #[doc = ""]
210 pub pressurememorysome: Option<f64>,
211 #[doc = "LXC Container status."]
212 #[doc = ""]
213 pub status: Status,
214 #[serde(skip_serializing_if = "Option::is_none", default)]
215 #[doc = "The current configured tags, if any."]
216 #[doc = ""]
217 pub tags: Option<String>,
218 #[serde(
219 serialize_with = "crate::types::serialize_bool_optional",
220 deserialize_with = "crate::types::deserialize_bool_optional"
221 )]
222 #[serde(skip_serializing_if = "Option::is_none", default)]
223 #[doc = "Determines if the guest is a template."]
224 #[doc = ""]
225 pub template: Option<bool>,
226 #[serde(
227 serialize_with = "crate::types::serialize_int_optional",
228 deserialize_with = "crate::types::deserialize_int_optional"
229 )]
230 #[serde(skip_serializing_if = "Option::is_none", default)]
231 #[doc = "Uptime in seconds."]
232 #[doc = ""]
233 pub uptime: Option<i64>,
234 #[doc = "The (unique) ID of the VM."]
235 #[doc = ""]
236 pub vmid: VmidInt,
237 #[serde(
238 flatten,
239 default,
240 skip_serializing_if = "::std::collections::HashMap::is_empty"
241 )]
242 pub additional_properties: ::std::collections::HashMap<String, ::serde_json::Value>,
243}
244impl PostParams {
245 pub fn new(ostemplate: OstemplateStr, vmid: VmidInt) -> Self {
246 Self {
247 ostemplate,
248 vmid,
249 arch: ::std::default::Default::default(),
250 bwlimit: ::std::default::Default::default(),
251 cmode: ::std::default::Default::default(),
252 console: ::std::default::Default::default(),
253 cores: ::std::default::Default::default(),
254 cpulimit: ::std::default::Default::default(),
255 cpuunits: ::std::default::Default::default(),
256 debug: ::std::default::Default::default(),
257 description: ::std::default::Default::default(),
258 devs: ::std::default::Default::default(),
259 entrypoint: ::std::default::Default::default(),
260 env: ::std::default::Default::default(),
261 features: ::std::default::Default::default(),
262 force: ::std::default::Default::default(),
263 ha_managed: ::std::default::Default::default(),
264 hookscript: ::std::default::Default::default(),
265 hostname: ::std::default::Default::default(),
266 ignore_unpack_errors: ::std::default::Default::default(),
267 lock: ::std::default::Default::default(),
268 memory: ::std::default::Default::default(),
269 mps: ::std::default::Default::default(),
270 nameserver: ::std::default::Default::default(),
271 nets: ::std::default::Default::default(),
272 onboot: ::std::default::Default::default(),
273 ostype: ::std::default::Default::default(),
274 password: ::std::default::Default::default(),
275 pool: ::std::default::Default::default(),
276 protection: ::std::default::Default::default(),
277 restore: ::std::default::Default::default(),
278 rootfs: ::std::default::Default::default(),
279 searchdomain: ::std::default::Default::default(),
280 ssh_public_keys: ::std::default::Default::default(),
281 start: ::std::default::Default::default(),
282 startup: ::std::default::Default::default(),
283 storage: ::std::default::Default::default(),
284 swap: ::std::default::Default::default(),
285 tags: ::std::default::Default::default(),
286 template: ::std::default::Default::default(),
287 timezone: ::std::default::Default::default(),
288 tty: ::std::default::Default::default(),
289 unique: ::std::default::Default::default(),
290 unprivileged: ::std::default::Default::default(),
291 unuseds: ::std::default::Default::default(),
292 additional_properties: ::std::default::Default::default(),
293 }
294 }
295}
296#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize)]
297pub struct PostParams {
298 #[serde(skip_serializing_if = "Option::is_none", default)]
299 #[doc = "OS architecture type."]
300 #[doc = ""]
301 pub arch: Option<Arch>,
302 #[serde(skip_serializing_if = "Option::is_none", default)]
303 #[doc = "Override I/O bandwidth limit (in KiB/s)."]
304 #[doc = ""]
305 pub bwlimit: Option<BwlimitNum>,
306 #[serde(skip_serializing_if = "Option::is_none", default)]
307 #[doc = "Console mode. By default, the console command tries to open a connection to one of the available tty devices. By setting cmode to 'console' it tries to attach to /dev/console instead. If you set cmode to 'shell', it simply invokes a shell inside the container (no login)."]
308 #[doc = ""]
309 pub cmode: Option<Cmode>,
310 #[serde(
311 serialize_with = "crate::types::serialize_bool_optional",
312 deserialize_with = "crate::types::deserialize_bool_optional"
313 )]
314 #[serde(skip_serializing_if = "Option::is_none", default)]
315 #[doc = "Attach a console device (/dev/console) to the container."]
316 #[doc = ""]
317 pub console: Option<bool>,
318 #[serde(skip_serializing_if = "Option::is_none", default)]
319 #[doc = "The number of cores assigned to the container. A container can use all available cores by default."]
320 #[doc = ""]
321 pub cores: Option<CoresInt>,
322 #[serde(skip_serializing_if = "Option::is_none", default)]
323 #[doc = "Limit of CPU usage."]
324 #[doc = ""]
325 #[doc = "NOTE: If the computer has 2 CPUs, it has a total of '2' CPU time. Value '0' indicates no CPU limit."]
326 #[doc = ""]
327 pub cpulimit: Option<CpulimitNum>,
328 #[serde(skip_serializing_if = "Option::is_none", default)]
329 #[doc = "CPU weight for a container, will be clamped to \\\\[1, 10000\\\\] in cgroup v2."]
330 #[doc = ""]
331 #[doc = "CPU weight for a container. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this container gets. Number is relative to the weights of all the other running guests."]
332 #[doc = ""]
333 pub cpuunits: Option<CpuunitsInt>,
334 #[serde(
335 serialize_with = "crate::types::serialize_bool_optional",
336 deserialize_with = "crate::types::deserialize_bool_optional"
337 )]
338 #[serde(skip_serializing_if = "Option::is_none", default)]
339 #[doc = "Try to be more verbose. For now this only enables debug log-level on start."]
340 #[doc = ""]
341 pub debug: Option<bool>,
342 #[serde(skip_serializing_if = "Option::is_none", default)]
343 #[doc = "Description for the Container. Shown in the web-interface CT's summary. This is saved as comment inside the configuration file."]
344 #[doc = ""]
345 pub description: Option<DescriptionStr>,
346 #[serde(rename = "dev[n]")]
347 #[serde(
348 serialize_with = "crate::types::serialize_multi::<NumberedDevs, _>",
349 deserialize_with = "crate::types::deserialize_multi::<NumberedDevs, _>"
350 )]
351 #[serde(skip_serializing_if = "::std::collections::HashMap::is_empty", default)]
352 #[serde(flatten)]
353 #[doc = "Device to pass through to the container"]
354 #[doc = ""]
355 pub devs: ::std::collections::HashMap<u32, String>,
356 #[serde(skip_serializing_if = "Option::is_none", default)]
357 #[doc = "Command to run as init, optionally with arguments; may start with an absolute path, relative path, or a binary in $PATH."]
358 #[doc = ""]
359 pub entrypoint: Option<EntrypointStr>,
360 #[serde(skip_serializing_if = "Option::is_none", default)]
361 #[doc = "The container runtime environment as NUL-separated list. Replaces any lxc.environment.runtime entries in the config."]
362 #[doc = ""]
363 pub env: Option<EnvStr>,
364 #[serde(skip_serializing_if = "Option::is_none", default)]
365 #[doc = "Allow containers access to advanced features."]
366 #[doc = ""]
367 pub features: Option<String>,
368 #[serde(
369 serialize_with = "crate::types::serialize_bool_optional",
370 deserialize_with = "crate::types::deserialize_bool_optional"
371 )]
372 #[serde(skip_serializing_if = "Option::is_none", default)]
373 #[doc = "Allow to overwrite existing container."]
374 #[doc = ""]
375 pub force: Option<bool>,
376 #[serde(rename = "ha-managed")]
377 #[serde(
378 serialize_with = "crate::types::serialize_bool_optional",
379 deserialize_with = "crate::types::deserialize_bool_optional"
380 )]
381 #[serde(skip_serializing_if = "Option::is_none", default)]
382 #[doc = "Add the CT as a HA resource after it was created."]
383 #[doc = ""]
384 pub ha_managed: Option<bool>,
385 #[serde(skip_serializing_if = "Option::is_none", default)]
386 #[doc = "Script that will be executed during various steps in the containers lifetime."]
387 #[doc = ""]
388 pub hookscript: Option<String>,
389 #[serde(skip_serializing_if = "Option::is_none", default)]
390 #[doc = "Set a host name for the container."]
391 #[doc = ""]
392 pub hostname: Option<HostnameStr>,
393 #[serde(rename = "ignore-unpack-errors")]
394 #[serde(
395 serialize_with = "crate::types::serialize_bool_optional",
396 deserialize_with = "crate::types::deserialize_bool_optional"
397 )]
398 #[serde(skip_serializing_if = "Option::is_none", default)]
399 #[doc = "Ignore errors when extracting the template."]
400 #[doc = ""]
401 pub ignore_unpack_errors: Option<bool>,
402 #[serde(skip_serializing_if = "Option::is_none", default)]
403 #[doc = "Lock/unlock the container."]
404 #[doc = ""]
405 pub lock: Option<Lock>,
406 #[serde(skip_serializing_if = "Option::is_none", default)]
407 #[doc = "Amount of RAM for the container in MB."]
408 #[doc = ""]
409 pub memory: Option<MemoryInt>,
410 #[serde(rename = "mp[n]")]
411 #[serde(
412 serialize_with = "crate::types::serialize_multi::<NumberedMps, _>",
413 deserialize_with = "crate::types::deserialize_multi::<NumberedMps, _>"
414 )]
415 #[serde(skip_serializing_if = "::std::collections::HashMap::is_empty", default)]
416 #[serde(flatten)]
417 #[doc = "Use volume as container mount point. Use the special syntax STORAGE_ID:SIZE_IN_GiB to allocate a new volume."]
418 #[doc = ""]
419 pub mps: ::std::collections::HashMap<u32, String>,
420 #[serde(skip_serializing_if = "Option::is_none", default)]
421 #[doc = "Sets DNS server IP address for a container. Create will automatically use the setting from the host if you neither set searchdomain nor nameserver."]
422 #[doc = ""]
423 pub nameserver: Option<String>,
424 #[serde(rename = "net[n]")]
425 #[serde(
426 serialize_with = "crate::types::serialize_multi::<NumberedNets, _>",
427 deserialize_with = "crate::types::deserialize_multi::<NumberedNets, _>"
428 )]
429 #[serde(skip_serializing_if = "::std::collections::HashMap::is_empty", default)]
430 #[serde(flatten)]
431 #[doc = "Specifies network interfaces for the container."]
432 #[doc = ""]
433 pub nets: ::std::collections::HashMap<u32, String>,
434 #[serde(
435 serialize_with = "crate::types::serialize_bool_optional",
436 deserialize_with = "crate::types::deserialize_bool_optional"
437 )]
438 #[serde(skip_serializing_if = "Option::is_none", default)]
439 #[doc = "Specifies whether a container will be started during system bootup."]
440 #[doc = ""]
441 pub onboot: Option<bool>,
442 #[doc = "The OS template or backup file."]
443 #[doc = ""]
444 pub ostemplate: OstemplateStr,
445 #[serde(skip_serializing_if = "Option::is_none", default)]
446 #[doc = "OS type. This is used to setup configuration inside the container, and corresponds to lxc setup scripts in /usr/share/lxc/config/\\\\<ostype\\\\>.common.conf. Value 'unmanaged' can be used to skip and OS specific setup."]
447 #[doc = ""]
448 pub ostype: Option<Ostype>,
449 #[serde(skip_serializing_if = "Option::is_none", default)]
450 #[doc = "Sets root password inside container."]
451 #[doc = ""]
452 pub password: Option<PasswordStr>,
453 #[serde(skip_serializing_if = "Option::is_none", default)]
454 #[doc = "Add the VM to the specified pool."]
455 #[doc = ""]
456 pub pool: Option<String>,
457 #[serde(
458 serialize_with = "crate::types::serialize_bool_optional",
459 deserialize_with = "crate::types::deserialize_bool_optional"
460 )]
461 #[serde(skip_serializing_if = "Option::is_none", default)]
462 #[doc = "Sets the protection flag of the container. This will prevent the CT or CT's disk remove/update operation."]
463 #[doc = ""]
464 pub protection: Option<bool>,
465 #[serde(
466 serialize_with = "crate::types::serialize_bool_optional",
467 deserialize_with = "crate::types::deserialize_bool_optional"
468 )]
469 #[serde(skip_serializing_if = "Option::is_none", default)]
470 #[doc = "Mark this as restore task."]
471 #[doc = ""]
472 pub restore: Option<bool>,
473 #[serde(skip_serializing_if = "Option::is_none", default)]
474 #[doc = "Use volume as container root."]
475 #[doc = ""]
476 pub rootfs: Option<String>,
477 #[serde(skip_serializing_if = "Option::is_none", default)]
478 #[doc = "Sets DNS search domains for a container. Create will automatically use the setting from the host if you neither set searchdomain nor nameserver."]
479 #[doc = ""]
480 pub searchdomain: Option<String>,
481 #[serde(rename = "ssh-public-keys")]
482 #[serde(skip_serializing_if = "Option::is_none", default)]
483 #[doc = "Setup public SSH keys (one key per line, OpenSSH format)."]
484 #[doc = ""]
485 pub ssh_public_keys: Option<String>,
486 #[serde(
487 serialize_with = "crate::types::serialize_bool_optional",
488 deserialize_with = "crate::types::deserialize_bool_optional"
489 )]
490 #[serde(skip_serializing_if = "Option::is_none", default)]
491 #[doc = "Start the CT after its creation finished successfully."]
492 #[doc = ""]
493 pub start: Option<bool>,
494 #[serde(skip_serializing_if = "Option::is_none", default)]
495 #[doc = "Startup and shutdown behavior. Order is a non-negative number defining the general startup order. Shutdown in done with reverse ordering. Additionally you can set the 'up' or 'down' delay in seconds, which specifies a delay to wait before the next VM is started or stopped."]
496 #[doc = ""]
497 pub startup: Option<String>,
498 #[serde(skip_serializing_if = "Option::is_none", default)]
499 #[doc = "Default Storage."]
500 #[doc = ""]
501 pub storage: Option<String>,
502 #[serde(skip_serializing_if = "Option::is_none", default)]
503 #[doc = "Amount of SWAP for the container in MB."]
504 #[doc = ""]
505 pub swap: Option<SwapInt>,
506 #[serde(skip_serializing_if = "Option::is_none", default)]
507 #[doc = "Tags of the Container. This is only meta information."]
508 #[doc = ""]
509 pub tags: Option<String>,
510 #[serde(
511 serialize_with = "crate::types::serialize_bool_optional",
512 deserialize_with = "crate::types::deserialize_bool_optional"
513 )]
514 #[serde(skip_serializing_if = "Option::is_none", default)]
515 #[doc = "Enable/disable Template."]
516 #[doc = ""]
517 pub template: Option<bool>,
518 #[serde(skip_serializing_if = "Option::is_none", default)]
519 #[doc = "Time zone to use in the container. If option isn't set, then nothing will be done. Can be set to 'host' to match the host time zone, or an arbitrary time zone option from /usr/share/zoneinfo/zone.tab"]
520 #[doc = ""]
521 pub timezone: Option<String>,
522 #[serde(skip_serializing_if = "Option::is_none", default)]
523 #[doc = "Specify the number of tty available to the container"]
524 #[doc = ""]
525 pub tty: Option<TtyInt>,
526 #[serde(
527 serialize_with = "crate::types::serialize_bool_optional",
528 deserialize_with = "crate::types::deserialize_bool_optional"
529 )]
530 #[serde(skip_serializing_if = "Option::is_none", default)]
531 #[doc = "Assign a unique random ethernet address."]
532 #[doc = ""]
533 pub unique: Option<bool>,
534 #[serde(
535 serialize_with = "crate::types::serialize_bool_optional",
536 deserialize_with = "crate::types::deserialize_bool_optional"
537 )]
538 #[serde(skip_serializing_if = "Option::is_none", default)]
539 #[doc = "Makes the container run as unprivileged user. For creation, the default is 1. For restore, the default is the value from the backup. (Should not be modified manually.)"]
540 #[doc = ""]
541 pub unprivileged: Option<bool>,
542 #[serde(rename = "unused[n]")]
543 #[serde(
544 serialize_with = "crate::types::serialize_multi::<NumberedUnuseds, _>",
545 deserialize_with = "crate::types::deserialize_multi::<NumberedUnuseds, _>"
546 )]
547 #[serde(skip_serializing_if = "::std::collections::HashMap::is_empty", default)]
548 #[serde(flatten)]
549 #[doc = "Reference to unused volumes. This is used internally, and should not be modified manually."]
550 #[doc = ""]
551 pub unuseds: ::std::collections::HashMap<u32, String>,
552 #[doc = "The (unique) ID of the VM."]
553 #[doc = ""]
554 pub vmid: VmidInt,
555 #[serde(
556 flatten,
557 deserialize_with = "crate::types::multi::deserialize_additional_data::<'_, PostParams, _, _>"
558 )]
559 pub additional_properties: ::std::collections::HashMap<String, ::serde_json::Value>,
560}
561impl crate::types::multi::Test for PostParams {
562 fn test_fn() -> fn(&str) -> bool {
563 fn the_test(input: &str) -> bool {
564 let array = [
565 <NumberedDevs as crate::types::multi::NumberedItems>::key_matches
566 as fn(&str) -> bool,
567 <NumberedMps as crate::types::multi::NumberedItems>::key_matches
568 as fn(&str) -> bool,
569 <NumberedNets as crate::types::multi::NumberedItems>::key_matches
570 as fn(&str) -> bool,
571 <NumberedUnuseds as crate::types::multi::NumberedItems>::key_matches
572 as fn(&str) -> bool,
573 ];
574 array.iter().any(|f| f(input))
575 }
576 the_test as _
577 }
578}
579#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, PartialEq, Default)]
580#[doc = "OS architecture type."]
581#[doc = ""]
582pub enum Arch {
583 #[serde(rename = "amd64")]
584 #[default]
585 Amd64,
586 #[serde(rename = "arm64")]
587 Arm64,
588 #[serde(rename = "armhf")]
589 Armhf,
590 #[serde(rename = "i386")]
591 I386,
592 #[serde(rename = "riscv32")]
593 Riscv32,
594 #[serde(rename = "riscv64")]
595 Riscv64,
596}
597impl TryFrom<&str> for Arch {
598 type Error = String;
599 fn try_from(value: &str) -> Result<Self, <Self as TryFrom<&str>>::Error> {
600 match value {
601 "amd64" => Ok(Self::Amd64),
602 "arm64" => Ok(Self::Arm64),
603 "armhf" => Ok(Self::Armhf),
604 "i386" => Ok(Self::I386),
605 "riscv32" => Ok(Self::Riscv32),
606 "riscv64" => Ok(Self::Riscv64),
607 v => Err(format!("Unknown variant {v}")),
608 }
609 }
610}
611#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, PartialEq, Default)]
612#[doc = "Console mode. By default, the console command tries to open a connection to one of the available tty devices. By setting cmode to 'console' it tries to attach to /dev/console instead. If you set cmode to 'shell', it simply invokes a shell inside the container (no login)."]
613#[doc = ""]
614pub enum Cmode {
615 #[serde(rename = "console")]
616 Console,
617 #[serde(rename = "shell")]
618 Shell,
619 #[serde(rename = "tty")]
620 #[default]
621 Tty,
622}
623impl TryFrom<&str> for Cmode {
624 type Error = String;
625 fn try_from(value: &str) -> Result<Self, <Self as TryFrom<&str>>::Error> {
626 match value {
627 "console" => Ok(Self::Console),
628 "shell" => Ok(Self::Shell),
629 "tty" => Ok(Self::Tty),
630 v => Err(format!("Unknown variant {v}")),
631 }
632 }
633}
634#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, PartialEq)]
635#[doc = "Lock/unlock the container."]
636#[doc = ""]
637pub enum Lock {
638 #[serde(rename = "backup")]
639 Backup,
640 #[serde(rename = "create")]
641 Create,
642 #[serde(rename = "destroyed")]
643 Destroyed,
644 #[serde(rename = "disk")]
645 Disk,
646 #[serde(rename = "fstrim")]
647 Fstrim,
648 #[serde(rename = "migrate")]
649 Migrate,
650 #[serde(rename = "mounted")]
651 Mounted,
652 #[serde(rename = "rollback")]
653 Rollback,
654 #[serde(rename = "snapshot")]
655 Snapshot,
656 #[serde(rename = "snapshot-delete")]
657 SnapshotDelete,
658}
659impl TryFrom<&str> for Lock {
660 type Error = String;
661 fn try_from(value: &str) -> Result<Self, <Self as TryFrom<&str>>::Error> {
662 match value {
663 "backup" => Ok(Self::Backup),
664 "create" => Ok(Self::Create),
665 "destroyed" => Ok(Self::Destroyed),
666 "disk" => Ok(Self::Disk),
667 "fstrim" => Ok(Self::Fstrim),
668 "migrate" => Ok(Self::Migrate),
669 "mounted" => Ok(Self::Mounted),
670 "rollback" => Ok(Self::Rollback),
671 "snapshot" => Ok(Self::Snapshot),
672 "snapshot-delete" => Ok(Self::SnapshotDelete),
673 v => Err(format!("Unknown variant {v}")),
674 }
675 }
676}
677#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, PartialEq)]
678#[doc = "OS type. This is used to setup configuration inside the container, and corresponds to lxc setup scripts in /usr/share/lxc/config/\\<ostype\\>.common.conf. Value 'unmanaged' can be used to skip and OS specific setup."]
679#[doc = ""]
680pub enum Ostype {
681 #[serde(rename = "alpine")]
682 Alpine,
683 #[serde(rename = "archlinux")]
684 Archlinux,
685 #[serde(rename = "centos")]
686 Centos,
687 #[serde(rename = "debian")]
688 Debian,
689 #[serde(rename = "devuan")]
690 Devuan,
691 #[serde(rename = "fedora")]
692 Fedora,
693 #[serde(rename = "gentoo")]
694 Gentoo,
695 #[serde(rename = "nixos")]
696 Nixos,
697 #[serde(rename = "opensuse")]
698 Opensuse,
699 #[serde(rename = "ubuntu")]
700 Ubuntu,
701 #[serde(rename = "unmanaged")]
702 Unmanaged,
703}
704impl TryFrom<&str> for Ostype {
705 type Error = String;
706 fn try_from(value: &str) -> Result<Self, <Self as TryFrom<&str>>::Error> {
707 match value {
708 "alpine" => Ok(Self::Alpine),
709 "archlinux" => Ok(Self::Archlinux),
710 "centos" => Ok(Self::Centos),
711 "debian" => Ok(Self::Debian),
712 "devuan" => Ok(Self::Devuan),
713 "fedora" => Ok(Self::Fedora),
714 "gentoo" => Ok(Self::Gentoo),
715 "nixos" => Ok(Self::Nixos),
716 "opensuse" => Ok(Self::Opensuse),
717 "ubuntu" => Ok(Self::Ubuntu),
718 "unmanaged" => Ok(Self::Unmanaged),
719 v => Err(format!("Unknown variant {v}")),
720 }
721 }
722}
723#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, PartialEq)]
724#[doc = "LXC Container status."]
725#[doc = ""]
726pub enum Status {
727 #[serde(rename = "running")]
728 Running,
729 #[serde(rename = "stopped")]
730 Stopped,
731}
732impl TryFrom<&str> for Status {
733 type Error = String;
734 fn try_from(value: &str) -> Result<Self, <Self as TryFrom<&str>>::Error> {
735 match value {
736 "running" => Ok(Self::Running),
737 "stopped" => Ok(Self::Stopped),
738 v => Err(format!("Unknown variant {v}")),
739 }
740 }
741}
742#[derive(Default)]
743struct NumberedDevs;
744impl crate::types::multi::NumberedItems for NumberedDevs {
745 type Item = String;
746 const PREFIX: &'static str = "dev";
747}
748#[derive(Default)]
749struct NumberedMps;
750impl crate::types::multi::NumberedItems for NumberedMps {
751 type Item = String;
752 const PREFIX: &'static str = "mp";
753}
754#[derive(Default)]
755struct NumberedNets;
756impl crate::types::multi::NumberedItems for NumberedNets {
757 type Item = String;
758 const PREFIX: &'static str = "net";
759}
760#[derive(Default)]
761struct NumberedUnuseds;
762impl crate::types::multi::NumberedItems for NumberedUnuseds {
763 type Item = String;
764 const PREFIX: &'static str = "unused";
765}
766#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
767pub struct CoresInt(i128);
768impl crate::types::bounded_integer::BoundedInteger for CoresInt {
769 const MIN: Option<i128> = Some(1i128);
770 const MAX: Option<i128> = Some(8192i128);
771 const DEFAULT: Option<i128> = None::<i128>;
772 const TYPE_DESCRIPTION: &'static str = "an integer between 1 and 8192";
773 fn get(&self) -> i128 {
774 self.0
775 }
776 fn new(value: i128) -> Result<Self, crate::types::bounded_integer::BoundedIntegerError> {
777 Self::validate(value)?;
778 Ok(Self(value))
779 }
780}
781impl std::convert::TryFrom<i128> for CoresInt {
782 type Error = crate::types::bounded_integer::BoundedIntegerError;
783 fn try_from(value: i128) -> Result<Self, Self::Error> {
784 crate::types::bounded_integer::BoundedInteger::new(value)
785 }
786}
787impl ::serde::Serialize for CoresInt {
788 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
789 where
790 S: ::serde::Serializer,
791 {
792 crate::types::bounded_integer::serialize_bounded_integer(self, serializer)
793 }
794}
795impl<'de> ::serde::Deserialize<'de> for CoresInt {
796 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
797 where
798 D: ::serde::Deserializer<'de>,
799 {
800 crate::types::bounded_integer::deserialize_bounded_integer(deserializer)
801 }
802}
803#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
804pub struct CpuunitsInt(i128);
805impl crate::types::bounded_integer::BoundedInteger for CpuunitsInt {
806 const MIN: Option<i128> = Some(0i128);
807 const MAX: Option<i128> = Some(500000i128);
808 const DEFAULT: Option<i128> = None::<i128>;
809 const TYPE_DESCRIPTION: &'static str = "an integer between 0 and 500000";
810 fn get(&self) -> i128 {
811 self.0
812 }
813 fn new(value: i128) -> Result<Self, crate::types::bounded_integer::BoundedIntegerError> {
814 Self::validate(value)?;
815 Ok(Self(value))
816 }
817}
818impl std::convert::TryFrom<i128> for CpuunitsInt {
819 type Error = crate::types::bounded_integer::BoundedIntegerError;
820 fn try_from(value: i128) -> Result<Self, Self::Error> {
821 crate::types::bounded_integer::BoundedInteger::new(value)
822 }
823}
824impl ::serde::Serialize for CpuunitsInt {
825 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
826 where
827 S: ::serde::Serializer,
828 {
829 crate::types::bounded_integer::serialize_bounded_integer(self, serializer)
830 }
831}
832impl<'de> ::serde::Deserialize<'de> for CpuunitsInt {
833 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
834 where
835 D: ::serde::Deserializer<'de>,
836 {
837 crate::types::bounded_integer::deserialize_bounded_integer(deserializer)
838 }
839}
840#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
841pub struct MemoryInt(i128);
842impl crate::types::bounded_integer::BoundedInteger for MemoryInt {
843 const MIN: Option<i128> = Some(16i128);
844 const MAX: Option<i128> = None::<i128>;
845 const DEFAULT: Option<i128> = Some(512i128);
846 const TYPE_DESCRIPTION: &'static str = "an integer greater than or equal to 16";
847 fn get(&self) -> i128 {
848 self.0
849 }
850 fn new(value: i128) -> Result<Self, crate::types::bounded_integer::BoundedIntegerError> {
851 Self::validate(value)?;
852 Ok(Self(value))
853 }
854}
855impl std::convert::TryFrom<i128> for MemoryInt {
856 type Error = crate::types::bounded_integer::BoundedIntegerError;
857 fn try_from(value: i128) -> Result<Self, Self::Error> {
858 crate::types::bounded_integer::BoundedInteger::new(value)
859 }
860}
861impl ::serde::Serialize for MemoryInt {
862 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
863 where
864 S: ::serde::Serializer,
865 {
866 crate::types::bounded_integer::serialize_bounded_integer(self, serializer)
867 }
868}
869impl<'de> ::serde::Deserialize<'de> for MemoryInt {
870 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
871 where
872 D: ::serde::Deserializer<'de>,
873 {
874 crate::types::bounded_integer::deserialize_bounded_integer(deserializer)
875 }
876}
877#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
878pub struct SwapInt(i128);
879impl crate::types::bounded_integer::BoundedInteger for SwapInt {
880 const MIN: Option<i128> = Some(0i128);
881 const MAX: Option<i128> = None::<i128>;
882 const DEFAULT: Option<i128> = Some(512i128);
883 const TYPE_DESCRIPTION: &'static str = "an integer greater than or equal to 0";
884 fn get(&self) -> i128 {
885 self.0
886 }
887 fn new(value: i128) -> Result<Self, crate::types::bounded_integer::BoundedIntegerError> {
888 Self::validate(value)?;
889 Ok(Self(value))
890 }
891}
892impl std::convert::TryFrom<i128> for SwapInt {
893 type Error = crate::types::bounded_integer::BoundedIntegerError;
894 fn try_from(value: i128) -> Result<Self, Self::Error> {
895 crate::types::bounded_integer::BoundedInteger::new(value)
896 }
897}
898impl ::serde::Serialize for SwapInt {
899 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
900 where
901 S: ::serde::Serializer,
902 {
903 crate::types::bounded_integer::serialize_bounded_integer(self, serializer)
904 }
905}
906impl<'de> ::serde::Deserialize<'de> for SwapInt {
907 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
908 where
909 D: ::serde::Deserializer<'de>,
910 {
911 crate::types::bounded_integer::deserialize_bounded_integer(deserializer)
912 }
913}
914#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
915pub struct TtyInt(i128);
916impl crate::types::bounded_integer::BoundedInteger for TtyInt {
917 const MIN: Option<i128> = Some(0i128);
918 const MAX: Option<i128> = Some(6i128);
919 const DEFAULT: Option<i128> = Some(2i128);
920 const TYPE_DESCRIPTION: &'static str = "an integer between 0 and 6";
921 fn get(&self) -> i128 {
922 self.0
923 }
924 fn new(value: i128) -> Result<Self, crate::types::bounded_integer::BoundedIntegerError> {
925 Self::validate(value)?;
926 Ok(Self(value))
927 }
928}
929impl std::convert::TryFrom<i128> for TtyInt {
930 type Error = crate::types::bounded_integer::BoundedIntegerError;
931 fn try_from(value: i128) -> Result<Self, Self::Error> {
932 crate::types::bounded_integer::BoundedInteger::new(value)
933 }
934}
935impl ::serde::Serialize for TtyInt {
936 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
937 where
938 S: ::serde::Serializer,
939 {
940 crate::types::bounded_integer::serialize_bounded_integer(self, serializer)
941 }
942}
943impl<'de> ::serde::Deserialize<'de> for TtyInt {
944 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
945 where
946 D: ::serde::Deserializer<'de>,
947 {
948 crate::types::bounded_integer::deserialize_bounded_integer(deserializer)
949 }
950}
951#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
952pub struct VmidInt(i128);
953impl crate::types::bounded_integer::BoundedInteger for VmidInt {
954 const MIN: Option<i128> = Some(100i128);
955 const MAX: Option<i128> = Some(999999999i128);
956 const DEFAULT: Option<i128> = None::<i128>;
957 const TYPE_DESCRIPTION: &'static str = "an integer between 100 and 999999999";
958 fn get(&self) -> i128 {
959 self.0
960 }
961 fn new(value: i128) -> Result<Self, crate::types::bounded_integer::BoundedIntegerError> {
962 Self::validate(value)?;
963 Ok(Self(value))
964 }
965}
966impl std::convert::TryFrom<i128> for VmidInt {
967 type Error = crate::types::bounded_integer::BoundedIntegerError;
968 fn try_from(value: i128) -> Result<Self, Self::Error> {
969 crate::types::bounded_integer::BoundedInteger::new(value)
970 }
971}
972impl ::serde::Serialize for VmidInt {
973 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
974 where
975 S: ::serde::Serializer,
976 {
977 crate::types::bounded_integer::serialize_bounded_integer(self, serializer)
978 }
979}
980impl<'de> ::serde::Deserialize<'de> for VmidInt {
981 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
982 where
983 D: ::serde::Deserializer<'de>,
984 {
985 crate::types::bounded_integer::deserialize_bounded_integer(deserializer)
986 }
987}
988#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
989pub struct BwlimitNum(f64);
990impl crate::types::bounded_number::BoundedNumber for BwlimitNum {
991 const MIN: Option<f64> = Some(0f64);
992 const MAX: Option<f64> = None::<f64>;
993 const DEFAULT: Option<f64> = None::<f64>;
994 const TYPE_DESCRIPTION: &'static str = "an number greater than or equal to 0";
995 fn get(&self) -> f64 {
996 self.0
997 }
998 fn new(value: f64) -> Result<Self, crate::types::bounded_number::BoundedNumberError> {
999 Self::validate(value)?;
1000 Ok(Self(value))
1001 }
1002}
1003impl std::convert::TryFrom<f64> for BwlimitNum {
1004 type Error = crate::types::bounded_number::BoundedNumberError;
1005 fn try_from(value: f64) -> Result<Self, Self::Error> {
1006 crate::types::bounded_number::BoundedNumber::new(value)
1007 }
1008}
1009impl std::convert::TryFrom<f32> for BwlimitNum {
1010 type Error = crate::types::bounded_number::BoundedNumberError;
1011 fn try_from(value: f32) -> Result<Self, Self::Error> {
1012 crate::types::bounded_number::BoundedNumber::new(value as f64)
1013 }
1014}
1015impl std::convert::TryFrom<i32> for BwlimitNum {
1016 type Error = crate::types::bounded_number::BoundedNumberError;
1017 fn try_from(value: i32) -> Result<Self, Self::Error> {
1018 crate::types::bounded_number::BoundedNumber::new(value as f64)
1019 }
1020}
1021impl std::convert::TryFrom<i64> for BwlimitNum {
1022 type Error = crate::types::bounded_number::BoundedNumberError;
1023 fn try_from(value: i64) -> Result<Self, Self::Error> {
1024 crate::types::bounded_number::BoundedNumber::new(value as f64)
1025 }
1026}
1027impl ::serde::Serialize for BwlimitNum {
1028 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
1029 where
1030 S: ::serde::Serializer,
1031 {
1032 crate::types::bounded_number::serialize_bounded_number(self, serializer)
1033 }
1034}
1035impl<'de> ::serde::Deserialize<'de> for BwlimitNum {
1036 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1037 where
1038 D: ::serde::Deserializer<'de>,
1039 {
1040 crate::types::bounded_number::deserialize_bounded_number(deserializer)
1041 }
1042}
1043#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
1044pub struct CpulimitNum(f64);
1045impl crate::types::bounded_number::BoundedNumber for CpulimitNum {
1046 const MIN: Option<f64> = Some(0f64);
1047 const MAX: Option<f64> = Some(8192f64);
1048 const DEFAULT: Option<f64> = Some(0f64);
1049 const TYPE_DESCRIPTION: &'static str = "an number between 0 and 8192";
1050 fn get(&self) -> f64 {
1051 self.0
1052 }
1053 fn new(value: f64) -> Result<Self, crate::types::bounded_number::BoundedNumberError> {
1054 Self::validate(value)?;
1055 Ok(Self(value))
1056 }
1057}
1058impl std::convert::TryFrom<f64> for CpulimitNum {
1059 type Error = crate::types::bounded_number::BoundedNumberError;
1060 fn try_from(value: f64) -> Result<Self, Self::Error> {
1061 crate::types::bounded_number::BoundedNumber::new(value)
1062 }
1063}
1064impl std::convert::TryFrom<f32> for CpulimitNum {
1065 type Error = crate::types::bounded_number::BoundedNumberError;
1066 fn try_from(value: f32) -> Result<Self, Self::Error> {
1067 crate::types::bounded_number::BoundedNumber::new(value as f64)
1068 }
1069}
1070impl std::convert::TryFrom<i32> for CpulimitNum {
1071 type Error = crate::types::bounded_number::BoundedNumberError;
1072 fn try_from(value: i32) -> Result<Self, Self::Error> {
1073 crate::types::bounded_number::BoundedNumber::new(value as f64)
1074 }
1075}
1076impl std::convert::TryFrom<i64> for CpulimitNum {
1077 type Error = crate::types::bounded_number::BoundedNumberError;
1078 fn try_from(value: i64) -> Result<Self, Self::Error> {
1079 crate::types::bounded_number::BoundedNumber::new(value as f64)
1080 }
1081}
1082impl ::serde::Serialize for CpulimitNum {
1083 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
1084 where
1085 S: ::serde::Serializer,
1086 {
1087 crate::types::bounded_number::serialize_bounded_number(self, serializer)
1088 }
1089}
1090impl<'de> ::serde::Deserialize<'de> for CpulimitNum {
1091 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1092 where
1093 D: ::serde::Deserializer<'de>,
1094 {
1095 crate::types::bounded_number::deserialize_bounded_number(deserializer)
1096 }
1097}
1098#[derive(Debug, Clone, PartialEq, PartialOrd)]
1099pub struct DescriptionStr {
1100 value: String,
1101}
1102impl crate::types::bounded_string::BoundedString for DescriptionStr {
1103 const MIN_LENGTH: Option<usize> = None::<usize>;
1104 const MAX_LENGTH: Option<usize> = Some(8192usize);
1105 const DEFAULT: Option<&'static str> = None::<&'static str>;
1106 const PATTERN: Option<&'static str> = None::<&'static str>;
1107 const TYPE_DESCRIPTION: &'static str = "a string with length at most 8192";
1108 fn get_value(&self) -> &str {
1109 &self.value
1110 }
1111 fn new(value: String) -> Result<Self, crate::types::bounded_string::BoundedStringError> {
1112 Self::validate(&value)?;
1113 Ok(Self { value })
1114 }
1115}
1116impl std::convert::TryFrom<String> for DescriptionStr {
1117 type Error = crate::types::bounded_string::BoundedStringError;
1118 fn try_from(value: String) -> Result<Self, Self::Error> {
1119 crate::types::bounded_string::BoundedString::new(value)
1120 }
1121}
1122impl ::serde::Serialize for DescriptionStr {
1123 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
1124 where
1125 S: ::serde::Serializer,
1126 {
1127 crate::types::bounded_string::serialize_bounded_string(self, serializer)
1128 }
1129}
1130impl<'de> ::serde::Deserialize<'de> for DescriptionStr {
1131 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1132 where
1133 D: ::serde::Deserializer<'de>,
1134 {
1135 crate::types::bounded_string::deserialize_bounded_string(deserializer)
1136 }
1137}
1138#[derive(Debug, Clone, PartialEq, PartialOrd)]
1139pub struct EntrypointStr {
1140 value: String,
1141}
1142impl crate::types::bounded_string::BoundedString for EntrypointStr {
1143 const MIN_LENGTH: Option<usize> = None::<usize>;
1144 const MAX_LENGTH: Option<usize> = None::<usize>;
1145 const DEFAULT: Option<&'static str> = Some("/sbin/init");
1146 const PATTERN: Option<&'static str> = Some("(?^:[^\\x00-\\x08\\x10-\\x1F\\x7F]+)");
1147 const TYPE_DESCRIPTION: &'static str =
1148 "a string with pattern r\"(?^:[^\\x00-\\x08\\x10-\\x1F\\x7F]+)\" and no length constraints";
1149 fn get_value(&self) -> &str {
1150 &self.value
1151 }
1152 fn new(value: String) -> Result<Self, crate::types::bounded_string::BoundedStringError> {
1153 Self::validate(&value)?;
1154 Ok(Self { value })
1155 }
1156}
1157impl std::convert::TryFrom<String> for EntrypointStr {
1158 type Error = crate::types::bounded_string::BoundedStringError;
1159 fn try_from(value: String) -> Result<Self, Self::Error> {
1160 crate::types::bounded_string::BoundedString::new(value)
1161 }
1162}
1163impl ::serde::Serialize for EntrypointStr {
1164 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
1165 where
1166 S: ::serde::Serializer,
1167 {
1168 crate::types::bounded_string::serialize_bounded_string(self, serializer)
1169 }
1170}
1171impl<'de> ::serde::Deserialize<'de> for EntrypointStr {
1172 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1173 where
1174 D: ::serde::Deserializer<'de>,
1175 {
1176 crate::types::bounded_string::deserialize_bounded_string(deserializer)
1177 }
1178}
1179#[derive(Debug, Clone, PartialEq, PartialOrd)]
1180pub struct EnvStr {
1181 value: String,
1182}
1183impl crate::types::bounded_string::BoundedString for EnvStr {
1184 const MIN_LENGTH: Option<usize> = None::<usize>;
1185 const MAX_LENGTH: Option<usize> = None::<usize>;
1186 const DEFAULT: Option<&'static str> = None::<&'static str>;
1187 const PATTERN: Option<&'static str> = Some(
1188 "(?^:(?:\\w+=[^\\x00-\\x08\\x10-\\x1F\\x7F]*)(?:\\0\\w+=[^\\x00-\\x08\\x10-\\x1F\\x7F]*)*)",
1189 );
1190 const TYPE_DESCRIPTION: &'static str = "a string with pattern r\"(?^:(?:\\w+=[^\\x00-\\x08\\x10-\\x1F\\x7F]*)(?:\\0\\w+=[^\\x00-\\x08\\x10-\\x1F\\x7F]*)*)\" and no length constraints";
1191 fn get_value(&self) -> &str {
1192 &self.value
1193 }
1194 fn new(value: String) -> Result<Self, crate::types::bounded_string::BoundedStringError> {
1195 Self::validate(&value)?;
1196 Ok(Self { value })
1197 }
1198}
1199impl std::convert::TryFrom<String> for EnvStr {
1200 type Error = crate::types::bounded_string::BoundedStringError;
1201 fn try_from(value: String) -> Result<Self, Self::Error> {
1202 crate::types::bounded_string::BoundedString::new(value)
1203 }
1204}
1205impl ::serde::Serialize for EnvStr {
1206 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
1207 where
1208 S: ::serde::Serializer,
1209 {
1210 crate::types::bounded_string::serialize_bounded_string(self, serializer)
1211 }
1212}
1213impl<'de> ::serde::Deserialize<'de> for EnvStr {
1214 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1215 where
1216 D: ::serde::Deserializer<'de>,
1217 {
1218 crate::types::bounded_string::deserialize_bounded_string(deserializer)
1219 }
1220}
1221#[derive(Debug, Clone, PartialEq, PartialOrd)]
1222pub struct HostnameStr {
1223 value: String,
1224}
1225impl crate::types::bounded_string::BoundedString for HostnameStr {
1226 const MIN_LENGTH: Option<usize> = None::<usize>;
1227 const MAX_LENGTH: Option<usize> = Some(255usize);
1228 const DEFAULT: Option<&'static str> = None::<&'static str>;
1229 const PATTERN: Option<&'static str> = None::<&'static str>;
1230 const TYPE_DESCRIPTION: &'static str = "a string with length at most 255";
1231 fn get_value(&self) -> &str {
1232 &self.value
1233 }
1234 fn new(value: String) -> Result<Self, crate::types::bounded_string::BoundedStringError> {
1235 Self::validate(&value)?;
1236 Ok(Self { value })
1237 }
1238}
1239impl std::convert::TryFrom<String> for HostnameStr {
1240 type Error = crate::types::bounded_string::BoundedStringError;
1241 fn try_from(value: String) -> Result<Self, Self::Error> {
1242 crate::types::bounded_string::BoundedString::new(value)
1243 }
1244}
1245impl ::serde::Serialize for HostnameStr {
1246 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
1247 where
1248 S: ::serde::Serializer,
1249 {
1250 crate::types::bounded_string::serialize_bounded_string(self, serializer)
1251 }
1252}
1253impl<'de> ::serde::Deserialize<'de> for HostnameStr {
1254 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1255 where
1256 D: ::serde::Deserializer<'de>,
1257 {
1258 crate::types::bounded_string::deserialize_bounded_string(deserializer)
1259 }
1260}
1261#[derive(Debug, Clone, PartialEq, PartialOrd)]
1262pub struct OstemplateStr {
1263 value: String,
1264}
1265impl crate::types::bounded_string::BoundedString for OstemplateStr {
1266 const MIN_LENGTH: Option<usize> = None::<usize>;
1267 const MAX_LENGTH: Option<usize> = Some(255usize);
1268 const DEFAULT: Option<&'static str> = None::<&'static str>;
1269 const PATTERN: Option<&'static str> = None::<&'static str>;
1270 const TYPE_DESCRIPTION: &'static str = "a string with length at most 255";
1271 fn get_value(&self) -> &str {
1272 &self.value
1273 }
1274 fn new(value: String) -> Result<Self, crate::types::bounded_string::BoundedStringError> {
1275 Self::validate(&value)?;
1276 Ok(Self { value })
1277 }
1278}
1279impl std::convert::TryFrom<String> for OstemplateStr {
1280 type Error = crate::types::bounded_string::BoundedStringError;
1281 fn try_from(value: String) -> Result<Self, Self::Error> {
1282 crate::types::bounded_string::BoundedString::new(value)
1283 }
1284}
1285impl ::serde::Serialize for OstemplateStr {
1286 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
1287 where
1288 S: ::serde::Serializer,
1289 {
1290 crate::types::bounded_string::serialize_bounded_string(self, serializer)
1291 }
1292}
1293impl<'de> ::serde::Deserialize<'de> for OstemplateStr {
1294 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1295 where
1296 D: ::serde::Deserializer<'de>,
1297 {
1298 crate::types::bounded_string::deserialize_bounded_string(deserializer)
1299 }
1300}
1301#[derive(Debug, Clone, PartialEq, PartialOrd)]
1302pub struct PasswordStr {
1303 value: String,
1304}
1305impl crate::types::bounded_string::BoundedString for PasswordStr {
1306 const MIN_LENGTH: Option<usize> = Some(5usize);
1307 const MAX_LENGTH: Option<usize> = None::<usize>;
1308 const DEFAULT: Option<&'static str> = None::<&'static str>;
1309 const PATTERN: Option<&'static str> = None::<&'static str>;
1310 const TYPE_DESCRIPTION: &'static str = "a string with length at least 5";
1311 fn get_value(&self) -> &str {
1312 &self.value
1313 }
1314 fn new(value: String) -> Result<Self, crate::types::bounded_string::BoundedStringError> {
1315 Self::validate(&value)?;
1316 Ok(Self { value })
1317 }
1318}
1319impl std::convert::TryFrom<String> for PasswordStr {
1320 type Error = crate::types::bounded_string::BoundedStringError;
1321 fn try_from(value: String) -> Result<Self, Self::Error> {
1322 crate::types::bounded_string::BoundedString::new(value)
1323 }
1324}
1325impl ::serde::Serialize for PasswordStr {
1326 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
1327 where
1328 S: ::serde::Serializer,
1329 {
1330 crate::types::bounded_string::serialize_bounded_string(self, serializer)
1331 }
1332}
1333impl<'de> ::serde::Deserialize<'de> for PasswordStr {
1334 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1335 where
1336 D: ::serde::Deserializer<'de>,
1337 {
1338 crate::types::bounded_string::deserialize_bounded_string(deserializer)
1339 }
1340}
1341impl<T> LxcClient<T>
1342where
1343 T: crate::client::Client,
1344{
1345 pub fn vmid(&self, vmid: crate::types::VmId) -> vmid::VmidClient<T> {
1346 vmid::VmidClient::<T>::new(self.client.clone(), &self.path, vmid)
1347 }
1348}