k8s_openapi/v1_33/api/resource/v1beta1/
basic_device.rs

1// Generated from definition io.k8s.api.resource.v1beta1.BasicDevice
2
3/// BasicDevice defines one device instance.
4#[derive(Clone, Debug, Default, PartialEq)]
5pub struct BasicDevice {
6    /// AllNodes indicates that all nodes have access to the device.
7    ///
8    /// Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
9    pub all_nodes: Option<bool>,
10
11    /// Attributes defines the set of attributes for this device. The name of each attribute must be unique in that set.
12    ///
13    /// The maximum number of attributes and capacities combined is 32.
14    pub attributes: Option<std::collections::BTreeMap<std::string::String, crate::api::resource::v1beta1::DeviceAttribute>>,
15
16    /// Capacity defines the set of capacities for this device. The name of each capacity must be unique in that set.
17    ///
18    /// The maximum number of attributes and capacities combined is 32.
19    pub capacity: Option<std::collections::BTreeMap<std::string::String, crate::api::resource::v1beta1::DeviceCapacity>>,
20
21    /// ConsumesCounters defines a list of references to sharedCounters and the set of counters that the device will consume from those counter sets.
22    ///
23    /// There can only be a single entry per counterSet.
24    ///
25    /// The total number of device counter consumption entries must be \<= 32. In addition, the total number in the entire ResourceSlice must be \<= 1024 (for example, 64 devices with 16 counters each).
26    pub consumes_counters: Option<std::vec::Vec<crate::api::resource::v1beta1::DeviceCounterConsumption>>,
27
28    /// NodeName identifies the node where the device is available.
29    ///
30    /// Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
31    pub node_name: Option<std::string::String>,
32
33    /// NodeSelector defines the nodes where the device is available.
34    ///
35    /// Must use exactly one term.
36    ///
37    /// Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
38    pub node_selector: Option<crate::api::core::v1::NodeSelector>,
39
40    /// If specified, these are the driver-defined taints.
41    ///
42    /// The maximum number of taints is 4.
43    ///
44    /// This is an alpha field and requires enabling the DRADeviceTaints feature gate.
45    pub taints: Option<std::vec::Vec<crate::api::resource::v1beta1::DeviceTaint>>,
46}
47
48impl crate::DeepMerge for BasicDevice {
49    fn merge_from(&mut self, other: Self) {
50        crate::DeepMerge::merge_from(&mut self.all_nodes, other.all_nodes);
51        crate::merge_strategies::map::granular(&mut self.attributes, other.attributes, |current_item, other_item| {
52            crate::DeepMerge::merge_from(current_item, other_item);
53        });
54        crate::merge_strategies::map::granular(&mut self.capacity, other.capacity, |current_item, other_item| {
55            crate::DeepMerge::merge_from(current_item, other_item);
56        });
57        crate::merge_strategies::list::atomic(&mut self.consumes_counters, other.consumes_counters);
58        crate::DeepMerge::merge_from(&mut self.node_name, other.node_name);
59        crate::DeepMerge::merge_from(&mut self.node_selector, other.node_selector);
60        crate::merge_strategies::list::atomic(&mut self.taints, other.taints);
61    }
62}
63
64impl<'de> crate::serde::Deserialize<'de> for BasicDevice {
65    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
66        #[allow(non_camel_case_types)]
67        enum Field {
68            Key_all_nodes,
69            Key_attributes,
70            Key_capacity,
71            Key_consumes_counters,
72            Key_node_name,
73            Key_node_selector,
74            Key_taints,
75            Other,
76        }
77
78        impl<'de> crate::serde::Deserialize<'de> for Field {
79            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
80                struct Visitor;
81
82                impl crate::serde::de::Visitor<'_> for Visitor {
83                    type Value = Field;
84
85                    fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
86                        f.write_str("field identifier")
87                    }
88
89                    fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
90                        Ok(match v {
91                            "allNodes" => Field::Key_all_nodes,
92                            "attributes" => Field::Key_attributes,
93                            "capacity" => Field::Key_capacity,
94                            "consumesCounters" => Field::Key_consumes_counters,
95                            "nodeName" => Field::Key_node_name,
96                            "nodeSelector" => Field::Key_node_selector,
97                            "taints" => Field::Key_taints,
98                            _ => Field::Other,
99                        })
100                    }
101                }
102
103                deserializer.deserialize_identifier(Visitor)
104            }
105        }
106
107        struct Visitor;
108
109        impl<'de> crate::serde::de::Visitor<'de> for Visitor {
110            type Value = BasicDevice;
111
112            fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
113                f.write_str("BasicDevice")
114            }
115
116            fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
117                let mut value_all_nodes: Option<bool> = None;
118                let mut value_attributes: Option<std::collections::BTreeMap<std::string::String, crate::api::resource::v1beta1::DeviceAttribute>> = None;
119                let mut value_capacity: Option<std::collections::BTreeMap<std::string::String, crate::api::resource::v1beta1::DeviceCapacity>> = None;
120                let mut value_consumes_counters: Option<std::vec::Vec<crate::api::resource::v1beta1::DeviceCounterConsumption>> = None;
121                let mut value_node_name: Option<std::string::String> = None;
122                let mut value_node_selector: Option<crate::api::core::v1::NodeSelector> = None;
123                let mut value_taints: Option<std::vec::Vec<crate::api::resource::v1beta1::DeviceTaint>> = None;
124
125                while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
126                    match key {
127                        Field::Key_all_nodes => value_all_nodes = crate::serde::de::MapAccess::next_value(&mut map)?,
128                        Field::Key_attributes => value_attributes = crate::serde::de::MapAccess::next_value(&mut map)?,
129                        Field::Key_capacity => value_capacity = crate::serde::de::MapAccess::next_value(&mut map)?,
130                        Field::Key_consumes_counters => value_consumes_counters = crate::serde::de::MapAccess::next_value(&mut map)?,
131                        Field::Key_node_name => value_node_name = crate::serde::de::MapAccess::next_value(&mut map)?,
132                        Field::Key_node_selector => value_node_selector = crate::serde::de::MapAccess::next_value(&mut map)?,
133                        Field::Key_taints => value_taints = crate::serde::de::MapAccess::next_value(&mut map)?,
134                        Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
135                    }
136                }
137
138                Ok(BasicDevice {
139                    all_nodes: value_all_nodes,
140                    attributes: value_attributes,
141                    capacity: value_capacity,
142                    consumes_counters: value_consumes_counters,
143                    node_name: value_node_name,
144                    node_selector: value_node_selector,
145                    taints: value_taints,
146                })
147            }
148        }
149
150        deserializer.deserialize_struct(
151            "BasicDevice",
152            &[
153                "allNodes",
154                "attributes",
155                "capacity",
156                "consumesCounters",
157                "nodeName",
158                "nodeSelector",
159                "taints",
160            ],
161            Visitor,
162        )
163    }
164}
165
166impl crate::serde::Serialize for BasicDevice {
167    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
168        let mut state = serializer.serialize_struct(
169            "BasicDevice",
170            self.all_nodes.as_ref().map_or(0, |_| 1) +
171            self.attributes.as_ref().map_or(0, |_| 1) +
172            self.capacity.as_ref().map_or(0, |_| 1) +
173            self.consumes_counters.as_ref().map_or(0, |_| 1) +
174            self.node_name.as_ref().map_or(0, |_| 1) +
175            self.node_selector.as_ref().map_or(0, |_| 1) +
176            self.taints.as_ref().map_or(0, |_| 1),
177        )?;
178        if let Some(value) = &self.all_nodes {
179            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "allNodes", value)?;
180        }
181        if let Some(value) = &self.attributes {
182            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "attributes", value)?;
183        }
184        if let Some(value) = &self.capacity {
185            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "capacity", value)?;
186        }
187        if let Some(value) = &self.consumes_counters {
188            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "consumesCounters", value)?;
189        }
190        if let Some(value) = &self.node_name {
191            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "nodeName", value)?;
192        }
193        if let Some(value) = &self.node_selector {
194            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "nodeSelector", value)?;
195        }
196        if let Some(value) = &self.taints {
197            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "taints", value)?;
198        }
199        crate::serde::ser::SerializeStruct::end(state)
200    }
201}
202
203#[cfg(feature = "schemars")]
204impl crate::schemars::JsonSchema for BasicDevice {
205    fn schema_name() -> std::string::String {
206        "io.k8s.api.resource.v1beta1.BasicDevice".into()
207    }
208
209    fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
210        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
211            metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
212                description: Some("BasicDevice defines one device instance.".into()),
213                ..Default::default()
214            })),
215            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::Object))),
216            object: Some(std::boxed::Box::new(crate::schemars::schema::ObjectValidation {
217                properties: [
218                    (
219                        "allNodes".into(),
220                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
221                            metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
222                                description: Some("AllNodes indicates that all nodes have access to the device.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.".into()),
223                                ..Default::default()
224                            })),
225                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::Boolean))),
226                            ..Default::default()
227                        }),
228                    ),
229                    (
230                        "attributes".into(),
231                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
232                            metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
233                                description: Some("Attributes defines the set of attributes for this device. The name of each attribute must be unique in that set.\n\nThe maximum number of attributes and capacities combined is 32.".into()),
234                                ..Default::default()
235                            })),
236                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::Object))),
237                            object: Some(std::boxed::Box::new(crate::schemars::schema::ObjectValidation {
238                                additional_properties: Some(std::boxed::Box::new(__gen.subschema_for::<crate::api::resource::v1beta1::DeviceAttribute>())),
239                                ..Default::default()
240                            })),
241                            ..Default::default()
242                        }),
243                    ),
244                    (
245                        "capacity".into(),
246                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
247                            metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
248                                description: Some("Capacity defines the set of capacities for this device. The name of each capacity must be unique in that set.\n\nThe maximum number of attributes and capacities combined is 32.".into()),
249                                ..Default::default()
250                            })),
251                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::Object))),
252                            object: Some(std::boxed::Box::new(crate::schemars::schema::ObjectValidation {
253                                additional_properties: Some(std::boxed::Box::new(__gen.subschema_for::<crate::api::resource::v1beta1::DeviceCapacity>())),
254                                ..Default::default()
255                            })),
256                            ..Default::default()
257                        }),
258                    ),
259                    (
260                        "consumesCounters".into(),
261                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
262                            metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
263                                description: Some("ConsumesCounters defines a list of references to sharedCounters and the set of counters that the device will consume from those counter sets.\n\nThere can only be a single entry per counterSet.\n\nThe total number of device counter consumption entries must be <= 32. In addition, the total number in the entire ResourceSlice must be <= 1024 (for example, 64 devices with 16 counters each).".into()),
264                                ..Default::default()
265                            })),
266                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::Array))),
267                            array: Some(std::boxed::Box::new(crate::schemars::schema::ArrayValidation {
268                                items: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(__gen.subschema_for::<crate::api::resource::v1beta1::DeviceCounterConsumption>()))),
269                                ..Default::default()
270                            })),
271                            ..Default::default()
272                        }),
273                    ),
274                    (
275                        "nodeName".into(),
276                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
277                            metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
278                                description: Some("NodeName identifies the node where the device is available.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.".into()),
279                                ..Default::default()
280                            })),
281                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::String))),
282                            ..Default::default()
283                        }),
284                    ),
285                    (
286                        "nodeSelector".into(),
287                        {
288                            let mut schema_obj = __gen.subschema_for::<crate::api::core::v1::NodeSelector>().into_object();
289                            schema_obj.metadata = Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
290                                description: Some("NodeSelector defines the nodes where the device is available.\n\nMust use exactly one term.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.".into()),
291                                ..Default::default()
292                            }));
293                            crate::schemars::schema::Schema::Object(schema_obj)
294                        },
295                    ),
296                    (
297                        "taints".into(),
298                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
299                            metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
300                                description: Some("If specified, these are the driver-defined taints.\n\nThe maximum number of taints is 4.\n\nThis is an alpha field and requires enabling the DRADeviceTaints feature gate.".into()),
301                                ..Default::default()
302                            })),
303                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::Array))),
304                            array: Some(std::boxed::Box::new(crate::schemars::schema::ArrayValidation {
305                                items: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(__gen.subschema_for::<crate::api::resource::v1beta1::DeviceTaint>()))),
306                                ..Default::default()
307                            })),
308                            ..Default::default()
309                        }),
310                    ),
311                ].into(),
312                ..Default::default()
313            })),
314            ..Default::default()
315        })
316    }
317}