k8s_openapi/v1_33/api/resource/v1alpha3/
device_taint_selector.rs

1// Generated from definition io.k8s.api.resource.v1alpha3.DeviceTaintSelector
2
3/// 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.
9    pub device: Option<std::string::String>,
10
11    /// If DeviceClassName is set, the selectors defined there must be satisfied by a device to be selected. This field corresponds to class.metadata.name.
12    pub device_class_name: Option<std::string::String>,
13
14    /// If driver is set, only devices from that driver are selected. This fields corresponds to slice.spec.driver.
15    pub driver: Option<std::string::String>,
16
17    /// 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.
20    pub pool: Option<std::string::String>,
21
22    /// Selectors contains the same selection criteria as a ResourceClaim. Currently, CEL expressions are supported. All of these selectors must be satisfied.
23    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}