k8s_openapi/v1_33/api/resource/v1alpha3/
device_taint_selector.rs1#[derive(Clone, Debug, Default, PartialEq)]
5pub struct DeviceTaintSelector {
6 pub device: Option<std::string::String>,
10
11 pub device_class_name: Option<std::string::String>,
13
14 pub driver: Option<std::string::String>,
16
17 pub pool: Option<std::string::String>,
21
22 pub selectors: Option<std::vec::Vec<crate::api::resource::v1alpha3::DeviceSelector>>,
24}
25
26impl crate::DeepMerge for DeviceTaintSelector {
27 fn merge_from(&mut self, other: Self) {
28 crate::DeepMerge::merge_from(&mut self.device, other.device);
29 crate::DeepMerge::merge_from(&mut self.device_class_name, other.device_class_name);
30 crate::DeepMerge::merge_from(&mut self.driver, other.driver);
31 crate::DeepMerge::merge_from(&mut self.pool, other.pool);
32 crate::merge_strategies::list::atomic(&mut self.selectors, other.selectors);
33 }
34}
35
36impl<'de> crate::serde::Deserialize<'de> for DeviceTaintSelector {
37 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
38 #[allow(non_camel_case_types)]
39 enum Field {
40 Key_device,
41 Key_device_class_name,
42 Key_driver,
43 Key_pool,
44 Key_selectors,
45 Other,
46 }
47
48 impl<'de> crate::serde::Deserialize<'de> for Field {
49 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
50 struct Visitor;
51
52 impl crate::serde::de::Visitor<'_> for Visitor {
53 type Value = Field;
54
55 fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
56 f.write_str("field identifier")
57 }
58
59 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
60 Ok(match v {
61 "device" => Field::Key_device,
62 "deviceClassName" => Field::Key_device_class_name,
63 "driver" => Field::Key_driver,
64 "pool" => Field::Key_pool,
65 "selectors" => Field::Key_selectors,
66 _ => Field::Other,
67 })
68 }
69 }
70
71 deserializer.deserialize_identifier(Visitor)
72 }
73 }
74
75 struct Visitor;
76
77 impl<'de> crate::serde::de::Visitor<'de> for Visitor {
78 type Value = DeviceTaintSelector;
79
80 fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
81 f.write_str("DeviceTaintSelector")
82 }
83
84 fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
85 let mut value_device: Option<std::string::String> = None;
86 let mut value_device_class_name: Option<std::string::String> = None;
87 let mut value_driver: Option<std::string::String> = None;
88 let mut value_pool: Option<std::string::String> = None;
89 let mut value_selectors: Option<std::vec::Vec<crate::api::resource::v1alpha3::DeviceSelector>> = None;
90
91 while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
92 match key {
93 Field::Key_device => value_device = crate::serde::de::MapAccess::next_value(&mut map)?,
94 Field::Key_device_class_name => value_device_class_name = crate::serde::de::MapAccess::next_value(&mut map)?,
95 Field::Key_driver => value_driver = crate::serde::de::MapAccess::next_value(&mut map)?,
96 Field::Key_pool => value_pool = crate::serde::de::MapAccess::next_value(&mut map)?,
97 Field::Key_selectors => value_selectors = crate::serde::de::MapAccess::next_value(&mut map)?,
98 Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
99 }
100 }
101
102 Ok(DeviceTaintSelector {
103 device: value_device,
104 device_class_name: value_device_class_name,
105 driver: value_driver,
106 pool: value_pool,
107 selectors: value_selectors,
108 })
109 }
110 }
111
112 deserializer.deserialize_struct(
113 "DeviceTaintSelector",
114 &[
115 "device",
116 "deviceClassName",
117 "driver",
118 "pool",
119 "selectors",
120 ],
121 Visitor,
122 )
123 }
124}
125
126impl crate::serde::Serialize for DeviceTaintSelector {
127 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
128 let mut state = serializer.serialize_struct(
129 "DeviceTaintSelector",
130 self.device.as_ref().map_or(0, |_| 1) +
131 self.device_class_name.as_ref().map_or(0, |_| 1) +
132 self.driver.as_ref().map_or(0, |_| 1) +
133 self.pool.as_ref().map_or(0, |_| 1) +
134 self.selectors.as_ref().map_or(0, |_| 1),
135 )?;
136 if let Some(value) = &self.device {
137 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "device", value)?;
138 }
139 if let Some(value) = &self.device_class_name {
140 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "deviceClassName", value)?;
141 }
142 if let Some(value) = &self.driver {
143 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "driver", value)?;
144 }
145 if let Some(value) = &self.pool {
146 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "pool", value)?;
147 }
148 if let Some(value) = &self.selectors {
149 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "selectors", value)?;
150 }
151 crate::serde::ser::SerializeStruct::end(state)
152 }
153}
154
155#[cfg(feature = "schemars")]
156impl crate::schemars::JsonSchema for DeviceTaintSelector {
157 fn schema_name() -> std::string::String {
158 "io.k8s.api.resource.v1alpha3.DeviceTaintSelector".into()
159 }
160
161 fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
162 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
163 metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
164 description: Some("DeviceTaintSelector defines which device(s) a DeviceTaintRule applies to. The empty selector matches all devices. Without a selector, no devices are matched.".into()),
165 ..Default::default()
166 })),
167 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::Object))),
168 object: Some(std::boxed::Box::new(crate::schemars::schema::ObjectValidation {
169 properties: [
170 (
171 "device".into(),
172 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
173 metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
174 description: Some("If device is set, only devices with that name are selected. This field corresponds to slice.spec.devices[].name.\n\nSetting also driver and pool may be required to avoid ambiguity, but is not required.".into()),
175 ..Default::default()
176 })),
177 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::String))),
178 ..Default::default()
179 }),
180 ),
181 (
182 "deviceClassName".into(),
183 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
184 metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
185 description: Some("If DeviceClassName is set, the selectors defined there must be satisfied by a device to be selected. This field corresponds to class.metadata.name.".into()),
186 ..Default::default()
187 })),
188 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::String))),
189 ..Default::default()
190 }),
191 ),
192 (
193 "driver".into(),
194 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
195 metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
196 description: Some("If driver is set, only devices from that driver are selected. This fields corresponds to slice.spec.driver.".into()),
197 ..Default::default()
198 })),
199 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::String))),
200 ..Default::default()
201 }),
202 ),
203 (
204 "pool".into(),
205 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
206 metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
207 description: Some("If pool is set, only devices in that pool are selected.\n\nAlso setting the driver name may be useful to avoid ambiguity when different drivers use the same pool name, but this is not required because selecting pools from different drivers may also be useful, for example when drivers with node-local devices use the node name as their pool name.".into()),
208 ..Default::default()
209 })),
210 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::String))),
211 ..Default::default()
212 }),
213 ),
214 (
215 "selectors".into(),
216 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
217 metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
218 description: Some("Selectors contains the same selection criteria as a ResourceClaim. Currently, CEL expressions are supported. All of these selectors must be satisfied.".into()),
219 ..Default::default()
220 })),
221 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::Array))),
222 array: Some(std::boxed::Box::new(crate::schemars::schema::ArrayValidation {
223 items: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(__gen.subschema_for::<crate::api::resource::v1alpha3::DeviceSelector>()))),
224 ..Default::default()
225 })),
226 ..Default::default()
227 }),
228 ),
229 ].into(),
230 ..Default::default()
231 })),
232 ..Default::default()
233 })
234 }
235}