1// Generated from definition io.k8s.api.resource.v1alpha3.DeviceTaintSelector
23/// DeviceTaintSelector defines which device(s) a DeviceTaintRule applies to. The empty selector matches all devices. Without a selector, no devices are matched.
4#[derive(Clone, Debug, Default, PartialEq)]
5pub struct DeviceTaintSelector {
6/// If device is set, only devices with that name are selected. This field corresponds to slice.spec.devices\[\].name.
7 ///
8 /// Setting also driver and pool may be required to avoid ambiguity, but is not required.
9pub device: Option<std::string::String>,
1011/// If DeviceClassName is set, the selectors defined there must be satisfied by a device to be selected. This field corresponds to class.metadata.name.
12pub device_class_name: Option<std::string::String>,
1314/// If driver is set, only devices from that driver are selected. This fields corresponds to slice.spec.driver.
15pub driver: Option<std::string::String>,
1617/// If pool is set, only devices in that pool are selected.
18 ///
19 /// Also 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.
20pub pool: Option<std::string::String>,
2122/// Selectors contains the same selection criteria as a ResourceClaim. Currently, CEL expressions are supported. All of these selectors must be satisfied.
23pub selectors: Option<std::vec::Vec<crate::api::resource::v1alpha3::DeviceSelector>>,
24}
2526impl crate::DeepMerge for DeviceTaintSelector {
27fn merge_from(&mut self, other: Self) {
28crate::DeepMerge::merge_from(&mut self.device, other.device);
29crate::DeepMerge::merge_from(&mut self.device_class_name, other.device_class_name);
30crate::DeepMerge::merge_from(&mut self.driver, other.driver);
31crate::DeepMerge::merge_from(&mut self.pool, other.pool);
32crate::merge_strategies::list::atomic(&mut self.selectors, other.selectors);
33 }
34}
3536impl<'de> crate::serde::Deserialize<'de> for DeviceTaintSelector {
37fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
38#[allow(non_camel_case_types)]
39enum Field {
40 Key_device,
41 Key_device_class_name,
42 Key_driver,
43 Key_pool,
44 Key_selectors,
45 Other,
46 }
4748impl<'de> crate::serde::Deserialize<'de> for Field {
49fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
50struct Visitor;
5152impl crate::serde::de::Visitor<'_> for Visitor {
53type Value = Field;
5455fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
56 f.write_str("field identifier")
57 }
5859fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
60Ok(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 }
7071 deserializer.deserialize_identifier(Visitor)
72 }
73 }
7475struct Visitor;
7677impl<'de> crate::serde::de::Visitor<'de> for Visitor {
78type Value = DeviceTaintSelector;
7980fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
81 f.write_str("DeviceTaintSelector")
82 }
8384fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
85let mut value_device: Option<std::string::String> = None;
86let mut value_device_class_name: Option<std::string::String> = None;
87let mut value_driver: Option<std::string::String> = None;
88let mut value_pool: Option<std::string::String> = None;
89let mut value_selectors: Option<std::vec::Vec<crate::api::resource::v1alpha3::DeviceSelector>> = None;
9091while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
92match 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 }
101102Ok(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 }
111112 deserializer.deserialize_struct(
113"DeviceTaintSelector",
114&[
115"device",
116"deviceClassName",
117"driver",
118"pool",
119"selectors",
120 ],
121 Visitor,
122 )
123 }
124}
125126impl crate::serde::Serialize for DeviceTaintSelector {
127fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
128let mut state = serializer.serialize_struct(
129"DeviceTaintSelector",
130self.device.as_ref().map_or(0, |_| 1) +
131self.device_class_name.as_ref().map_or(0, |_| 1) +
132self.driver.as_ref().map_or(0, |_| 1) +
133self.pool.as_ref().map_or(0, |_| 1) +
134self.selectors.as_ref().map_or(0, |_| 1),
135 )?;
136if let Some(value) = &self.device {
137crate::serde::ser::SerializeStruct::serialize_field(&mut state, "device", value)?;
138 }
139if let Some(value) = &self.device_class_name {
140crate::serde::ser::SerializeStruct::serialize_field(&mut state, "deviceClassName", value)?;
141 }
142if let Some(value) = &self.driver {
143crate::serde::ser::SerializeStruct::serialize_field(&mut state, "driver", value)?;
144 }
145if let Some(value) = &self.pool {
146crate::serde::ser::SerializeStruct::serialize_field(&mut state, "pool", value)?;
147 }
148if let Some(value) = &self.selectors {
149crate::serde::ser::SerializeStruct::serialize_field(&mut state, "selectors", value)?;
150 }
151crate::serde::ser::SerializeStruct::end(state)
152 }
153}
154155#[cfg(feature = "schemars")]
156impl crate::schemars::JsonSchema for DeviceTaintSelector {
157fn schema_name() -> std::string::String {
158"io.k8s.api.resource.v1alpha3.DeviceTaintSelector".into()
159 }
160161fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
162crate::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(),
172crate::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(),
183crate::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(),
194crate::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(),
205crate::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(),
216crate::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}