k8s_openapi/v1_30/api/resource/v1alpha2/
resource_handle.rs

1// Generated from definition io.k8s.api.resource.v1alpha2.ResourceHandle
2
3/// ResourceHandle holds opaque resource data for processing by a specific kubelet plugin.
4#[derive(Clone, Debug, Default, PartialEq)]
5pub struct ResourceHandle {
6    /// Data contains the opaque data associated with this ResourceHandle. It is set by the controller component of the resource driver whose name matches the DriverName set in the ResourceClaimStatus this ResourceHandle is embedded in. It is set at allocation time and is intended for processing by the kubelet plugin whose name matches the DriverName set in this ResourceHandle.
7    ///
8    /// The maximum size of this field is 16KiB. This may get increased in the future, but not reduced.
9    pub data: Option<std::string::String>,
10
11    /// DriverName specifies the name of the resource driver whose kubelet plugin should be invoked to process this ResourceHandle's data once it lands on a node. This may differ from the DriverName set in ResourceClaimStatus this ResourceHandle is embedded in.
12    pub driver_name: Option<std::string::String>,
13
14    /// If StructuredData is set, then it needs to be used instead of Data.
15    pub structured_data: Option<crate::api::resource::v1alpha2::StructuredResourceHandle>,
16}
17
18impl crate::DeepMerge for ResourceHandle {
19    fn merge_from(&mut self, other: Self) {
20        crate::DeepMerge::merge_from(&mut self.data, other.data);
21        crate::DeepMerge::merge_from(&mut self.driver_name, other.driver_name);
22        crate::DeepMerge::merge_from(&mut self.structured_data, other.structured_data);
23    }
24}
25
26impl<'de> crate::serde::Deserialize<'de> for ResourceHandle {
27    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
28        #[allow(non_camel_case_types)]
29        enum Field {
30            Key_data,
31            Key_driver_name,
32            Key_structured_data,
33            Other,
34        }
35
36        impl<'de> crate::serde::Deserialize<'de> for Field {
37            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
38                struct Visitor;
39
40                impl crate::serde::de::Visitor<'_> for Visitor {
41                    type Value = Field;
42
43                    fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
44                        f.write_str("field identifier")
45                    }
46
47                    fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
48                        Ok(match v {
49                            "data" => Field::Key_data,
50                            "driverName" => Field::Key_driver_name,
51                            "structuredData" => Field::Key_structured_data,
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 = ResourceHandle;
65
66            fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
67                f.write_str("ResourceHandle")
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_data: Option<std::string::String> = None;
72                let mut value_driver_name: Option<std::string::String> = None;
73                let mut value_structured_data: Option<crate::api::resource::v1alpha2::StructuredResourceHandle> = None;
74
75                while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
76                    match key {
77                        Field::Key_data => value_data = crate::serde::de::MapAccess::next_value(&mut map)?,
78                        Field::Key_driver_name => value_driver_name = crate::serde::de::MapAccess::next_value(&mut map)?,
79                        Field::Key_structured_data => value_structured_data = crate::serde::de::MapAccess::next_value(&mut map)?,
80                        Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
81                    }
82                }
83
84                Ok(ResourceHandle {
85                    data: value_data,
86                    driver_name: value_driver_name,
87                    structured_data: value_structured_data,
88                })
89            }
90        }
91
92        deserializer.deserialize_struct(
93            "ResourceHandle",
94            &[
95                "data",
96                "driverName",
97                "structuredData",
98            ],
99            Visitor,
100        )
101    }
102}
103
104impl crate::serde::Serialize for ResourceHandle {
105    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
106        let mut state = serializer.serialize_struct(
107            "ResourceHandle",
108            self.data.as_ref().map_or(0, |_| 1) +
109            self.driver_name.as_ref().map_or(0, |_| 1) +
110            self.structured_data.as_ref().map_or(0, |_| 1),
111        )?;
112        if let Some(value) = &self.data {
113            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "data", value)?;
114        }
115        if let Some(value) = &self.driver_name {
116            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "driverName", value)?;
117        }
118        if let Some(value) = &self.structured_data {
119            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "structuredData", value)?;
120        }
121        crate::serde::ser::SerializeStruct::end(state)
122    }
123}
124
125#[cfg(feature = "schemars")]
126impl crate::schemars::JsonSchema for ResourceHandle {
127    fn schema_name() -> std::borrow::Cow<'static, str> {
128        "io.k8s.api.resource.v1alpha2.ResourceHandle".into()
129    }
130
131    fn json_schema(__gen: &mut crate::schemars::SchemaGenerator) -> crate::schemars::Schema {
132        crate::schemars::json_schema!({
133            "description": "ResourceHandle holds opaque resource data for processing by a specific kubelet plugin.",
134            "type": "object",
135            "properties": {
136                "data": {
137                    "description": "Data contains the opaque data associated with this ResourceHandle. It is set by the controller component of the resource driver whose name matches the DriverName set in the ResourceClaimStatus this ResourceHandle is embedded in. It is set at allocation time and is intended for processing by the kubelet plugin whose name matches the DriverName set in this ResourceHandle.\n\nThe maximum size of this field is 16KiB. This may get increased in the future, but not reduced.",
138                    "type": "string",
139                },
140                "driverName": {
141                    "description": "DriverName specifies the name of the resource driver whose kubelet plugin should be invoked to process this ResourceHandle's data once it lands on a node. This may differ from the DriverName set in ResourceClaimStatus this ResourceHandle is embedded in.",
142                    "type": "string",
143                },
144                "structuredData": ({
145                    let mut schema_obj = __gen.subschema_for::<crate::api::resource::v1alpha2::StructuredResourceHandle>();
146                    schema_obj.ensure_object().insert("description".into(), "If StructuredData is set, then it needs to be used instead of Data.".into());
147                    schema_obj
148                }),
149            },
150        })
151    }
152}