1use crate::error::OciSpecError;
2use derive_builder::Builder;
3use getset::{Getters, Setters};
4use serde::{Deserialize, Serialize};
5use std::path::PathBuf;
6
7#[derive(
8 Builder, Clone, Debug, Default, Deserialize, Getters, Setters, Eq, PartialEq, Serialize,
9)]
10#[builder(
11 default,
12 pattern = "owned",
13 setter(into, strip_option),
14 build_fn(error = "OciSpecError")
15)]
16#[getset(get = "pub", set = "pub")]
17pub struct VM {
19 #[serde(default, skip_serializing_if = "Option::is_none")]
20 hypervisor: Option<VMHypervisor>,
23
24 kernel: VMKernel,
27
28 #[serde(default, skip_serializing_if = "Option::is_none")]
29 image: Option<VMImage>,
32}
33
34#[derive(
35 Builder, Clone, Debug, Default, Deserialize, Getters, Setters, Eq, PartialEq, Serialize,
36)]
37#[builder(
38 default,
39 pattern = "owned",
40 setter(into, strip_option),
41 build_fn(error = "OciSpecError")
42)]
43#[getset(get = "pub", set = "pub")]
44pub struct VMHypervisor {
47 path: PathBuf,
50
51 #[serde(default, skip_serializing_if = "Option::is_none")]
52 parameters: Option<Vec<String>>,
54}
55
56#[derive(
57 Builder, Clone, Debug, Default, Deserialize, Getters, Setters, Eq, PartialEq, Serialize,
58)]
59#[builder(
60 default,
61 pattern = "owned",
62 setter(into, strip_option),
63 build_fn(error = "OciSpecError")
64)]
65#[getset(get = "pub", set = "pub")]
66pub struct VMKernel {
69 path: PathBuf,
72
73 #[serde(default, skip_serializing_if = "Option::is_none")]
74 parameters: Option<Vec<String>>,
76
77 #[serde(default, skip_serializing_if = "Option::is_none")]
78 initrd: Option<String>,
81}
82
83#[derive(
84 Builder, Clone, Debug, Default, Deserialize, Getters, Setters, Eq, PartialEq, Serialize,
85)]
86#[builder(
87 default,
88 pattern = "owned",
89 setter(into, strip_option),
90 build_fn(error = "OciSpecError")
91)]
92#[getset(get = "pub", set = "pub")]
93pub struct VMImage {
95 path: PathBuf,
98
99 format: String,
102}