k8s_openapi/v1_31/api/resource/v1alpha3/
basic_device.rs

1// Generated from definition io.k8s.api.resource.v1alpha3.BasicDevice
2
3/// BasicDevice defines one device instance.
4#[derive(Clone, Debug, Default, PartialEq)]
5pub struct BasicDevice {
6    /// Attributes defines the set of attributes for this device. The name of each attribute must be unique in that set.
7    ///
8    /// The maximum number of attributes and capacities combined is 32.
9    pub attributes: Option<std::collections::BTreeMap<std::string::String, crate::api::resource::v1alpha3::DeviceAttribute>>,
10
11    /// Capacity defines the set of capacities for this device. The name of each capacity must be unique in that set.
12    ///
13    /// The maximum number of attributes and capacities combined is 32.
14    pub capacity: Option<std::collections::BTreeMap<std::string::String, crate::apimachinery::pkg::api::resource::Quantity>>,
15}
16
17impl crate::DeepMerge for BasicDevice {
18    fn merge_from(&mut self, other: Self) {
19        crate::merge_strategies::map::granular(&mut self.attributes, other.attributes, |current_item, other_item| {
20            crate::DeepMerge::merge_from(current_item, other_item);
21        });
22        crate::merge_strategies::map::granular(&mut self.capacity, other.capacity, |current_item, other_item| {
23            crate::DeepMerge::merge_from(current_item, other_item);
24        });
25    }
26}
27
28impl<'de> crate::serde::Deserialize<'de> for BasicDevice {
29    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
30        #[allow(non_camel_case_types)]
31        enum Field {
32            Key_attributes,
33            Key_capacity,
34            Other,
35        }
36
37        impl<'de> crate::serde::Deserialize<'de> for Field {
38            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
39                struct Visitor;
40
41                impl crate::serde::de::Visitor<'_> for Visitor {
42                    type Value = Field;
43
44                    fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
45                        f.write_str("field identifier")
46                    }
47
48                    fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
49                        Ok(match v {
50                            "attributes" => Field::Key_attributes,
51                            "capacity" => Field::Key_capacity,
52                            _ => Field::Other,
53                        })
54                    }
55                }
56
57                deserializer.deserialize_identifier(Visitor)
58            }
59        }
60
61        struct Visitor;
62
63        impl<'de> crate::serde::de::Visitor<'de> for Visitor {
64            type Value = BasicDevice;
65
66            fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
67                f.write_str("BasicDevice")
68            }
69
70            fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
71                let mut value_attributes: Option<std::collections::BTreeMap<std::string::String, crate::api::resource::v1alpha3::DeviceAttribute>> = None;
72                let mut value_capacity: Option<std::collections::BTreeMap<std::string::String, crate::apimachinery::pkg::api::resource::Quantity>> = None;
73
74                while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
75                    match key {
76                        Field::Key_attributes => value_attributes = crate::serde::de::MapAccess::next_value(&mut map)?,
77                        Field::Key_capacity => value_capacity = crate::serde::de::MapAccess::next_value(&mut map)?,
78                        Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
79                    }
80                }
81
82                Ok(BasicDevice {
83                    attributes: value_attributes,
84                    capacity: value_capacity,
85                })
86            }
87        }
88
89        deserializer.deserialize_struct(
90            "BasicDevice",
91            &[
92                "attributes",
93                "capacity",
94            ],
95            Visitor,
96        )
97    }
98}
99
100impl crate::serde::Serialize for BasicDevice {
101    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
102        let mut state = serializer.serialize_struct(
103            "BasicDevice",
104            self.attributes.as_ref().map_or(0, |_| 1) +
105            self.capacity.as_ref().map_or(0, |_| 1),
106        )?;
107        if let Some(value) = &self.attributes {
108            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "attributes", value)?;
109        }
110        if let Some(value) = &self.capacity {
111            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "capacity", value)?;
112        }
113        crate::serde::ser::SerializeStruct::end(state)
114    }
115}
116
117#[cfg(feature = "schemars")]
118impl crate::schemars::JsonSchema for BasicDevice {
119    fn schema_name() -> std::string::String {
120        "io.k8s.api.resource.v1alpha3.BasicDevice".into()
121    }
122
123    fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
124        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
125            metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
126                description: Some("BasicDevice defines one device instance.".into()),
127                ..Default::default()
128            })),
129            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::Object))),
130            object: Some(std::boxed::Box::new(crate::schemars::schema::ObjectValidation {
131                properties: [
132                    (
133                        "attributes".into(),
134                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
135                            metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
136                                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()),
137                                ..Default::default()
138                            })),
139                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::Object))),
140                            object: Some(std::boxed::Box::new(crate::schemars::schema::ObjectValidation {
141                                additional_properties: Some(std::boxed::Box::new(__gen.subschema_for::<crate::api::resource::v1alpha3::DeviceAttribute>())),
142                                ..Default::default()
143                            })),
144                            ..Default::default()
145                        }),
146                    ),
147                    (
148                        "capacity".into(),
149                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
150                            metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
151                                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()),
152                                ..Default::default()
153                            })),
154                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::Object))),
155                            object: Some(std::boxed::Box::new(crate::schemars::schema::ObjectValidation {
156                                additional_properties: Some(std::boxed::Box::new(__gen.subschema_for::<crate::apimachinery::pkg::api::resource::Quantity>())),
157                                ..Default::default()
158                            })),
159                            ..Default::default()
160                        }),
161                    ),
162                ].into(),
163                ..Default::default()
164            })),
165            ..Default::default()
166        })
167    }
168}