Skip to main content

k8s_openapi/v1_36/api/apiserverinternal/v1alpha1/
server_storage_version.rs

1// Generated from definition io.k8s.api.apiserverinternal.v1alpha1.ServerStorageVersion
2
3/// An API server instance reports the version it can decode and the version it encodes objects to when persisting objects in the backend.
4#[derive(Clone, Debug, Default, PartialEq)]
5pub struct ServerStorageVersion {
6    /// apiServerID is the ID of the reporting API server.
7    pub api_server_id: std::string::String,
8
9    /// decodableVersions are the encoding versions the API server can handle to decode. The API server can decode objects encoded in these versions. The encodingVersion must be included in the decodableVersions.
10    pub decodable_versions: std::vec::Vec<std::string::String>,
11
12    /// encodingVersion the API server encodes the object to when persisting it in the backend (e.g., etcd).
13    pub encoding_version: std::string::String,
14
15    /// servedVersions lists all versions the API server can serve. DecodableVersions must include all ServedVersions.
16    pub served_versions: Option<std::vec::Vec<std::string::String>>,
17}
18
19impl crate::DeepMerge for ServerStorageVersion {
20    fn merge_from(&mut self, other: Self) {
21        crate::DeepMerge::merge_from(&mut self.api_server_id, other.api_server_id);
22        crate::merge_strategies::list::set(&mut self.decodable_versions, other.decodable_versions);
23        crate::DeepMerge::merge_from(&mut self.encoding_version, other.encoding_version);
24        crate::merge_strategies::list::set(&mut self.served_versions, other.served_versions);
25    }
26}
27
28impl<'de> crate::serde::Deserialize<'de> for ServerStorageVersion {
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_api_server_id,
33            Key_decodable_versions,
34            Key_encoding_version,
35            Key_served_versions,
36            Other,
37        }
38
39        impl<'de> crate::serde::Deserialize<'de> for Field {
40            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
41                struct Visitor;
42
43                impl crate::serde::de::Visitor<'_> for Visitor {
44                    type Value = Field;
45
46                    fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
47                        f.write_str("field identifier")
48                    }
49
50                    fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
51                        Ok(match v {
52                            "apiServerID" => Field::Key_api_server_id,
53                            "decodableVersions" => Field::Key_decodable_versions,
54                            "encodingVersion" => Field::Key_encoding_version,
55                            "servedVersions" => Field::Key_served_versions,
56                            _ => Field::Other,
57                        })
58                    }
59                }
60
61                deserializer.deserialize_identifier(Visitor)
62            }
63        }
64
65        struct Visitor;
66
67        impl<'de> crate::serde::de::Visitor<'de> for Visitor {
68            type Value = ServerStorageVersion;
69
70            fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
71                f.write_str("ServerStorageVersion")
72            }
73
74            fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
75                let mut value_api_server_id: Option<std::string::String> = None;
76                let mut value_decodable_versions: Option<std::vec::Vec<std::string::String>> = None;
77                let mut value_encoding_version: Option<std::string::String> = None;
78                let mut value_served_versions: Option<std::vec::Vec<std::string::String>> = None;
79
80                while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
81                    match key {
82                        Field::Key_api_server_id => value_api_server_id = crate::serde::de::MapAccess::next_value(&mut map)?,
83                        Field::Key_decodable_versions => value_decodable_versions = crate::serde::de::MapAccess::next_value(&mut map)?,
84                        Field::Key_encoding_version => value_encoding_version = crate::serde::de::MapAccess::next_value(&mut map)?,
85                        Field::Key_served_versions => value_served_versions = crate::serde::de::MapAccess::next_value(&mut map)?,
86                        Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
87                    }
88                }
89
90                Ok(ServerStorageVersion {
91                    api_server_id: value_api_server_id.unwrap_or_default(),
92                    decodable_versions: value_decodable_versions.unwrap_or_default(),
93                    encoding_version: value_encoding_version.unwrap_or_default(),
94                    served_versions: value_served_versions,
95                })
96            }
97        }
98
99        deserializer.deserialize_struct(
100            "ServerStorageVersion",
101            &[
102                "apiServerID",
103                "decodableVersions",
104                "encodingVersion",
105                "servedVersions",
106            ],
107            Visitor,
108        )
109    }
110}
111
112impl crate::serde::Serialize for ServerStorageVersion {
113    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
114        let mut state = serializer.serialize_struct(
115            "ServerStorageVersion",
116            3 +
117            self.served_versions.as_ref().map_or(0, |_| 1),
118        )?;
119        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "apiServerID", &self.api_server_id)?;
120        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "decodableVersions", &self.decodable_versions)?;
121        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "encodingVersion", &self.encoding_version)?;
122        if let Some(value) = &self.served_versions {
123            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "servedVersions", value)?;
124        }
125        crate::serde::ser::SerializeStruct::end(state)
126    }
127}
128
129#[cfg(feature = "schemars")]
130impl crate::schemars::JsonSchema for ServerStorageVersion {
131    fn schema_name() -> std::borrow::Cow<'static, str> {
132        "io.k8s.api.apiserverinternal.v1alpha1.ServerStorageVersion".into()
133    }
134
135    fn json_schema(__gen: &mut crate::schemars::SchemaGenerator) -> crate::schemars::Schema {
136        crate::schemars::json_schema!({
137            "description": "An API server instance reports the version it can decode and the version it encodes objects to when persisting objects in the backend.",
138            "type": "object",
139            "properties": {
140                "apiServerID": {
141                    "description": "apiServerID is the ID of the reporting API server.",
142                    "type": "string",
143                },
144                "decodableVersions": {
145                    "description": "decodableVersions are the encoding versions the API server can handle to decode. The API server can decode objects encoded in these versions. The encodingVersion must be included in the decodableVersions.",
146                    "type": "array",
147                    "items": {
148                        "type": "string",
149                    },
150                },
151                "encodingVersion": {
152                    "description": "encodingVersion the API server encodes the object to when persisting it in the backend (e.g., etcd).",
153                    "type": "string",
154                },
155                "servedVersions": {
156                    "description": "servedVersions lists all versions the API server can serve. DecodableVersions must include all ServedVersions.",
157                    "type": "array",
158                    "items": {
159                        "type": "string",
160                    },
161                },
162            },
163            "required": [
164                "apiServerID",
165                "decodableVersions",
166                "encodingVersion",
167            ],
168        })
169    }
170}
171
172#[cfg(feature = "schemars08")]
173impl crate::schemars08::JsonSchema for ServerStorageVersion {
174    fn schema_name() -> std::string::String {
175        "io.k8s.api.apiserverinternal.v1alpha1.ServerStorageVersion".into()
176    }
177
178    fn json_schema(__gen: &mut crate::schemars08::gen::SchemaGenerator) -> crate::schemars08::schema::Schema {
179        crate::schemars08::schema::Schema::Object(crate::schemars08::schema::SchemaObject {
180            metadata: Some(std::boxed::Box::new(crate::schemars08::schema::Metadata {
181                description: Some("An API server instance reports the version it can decode and the version it encodes objects to when persisting objects in the backend.".into()),
182                ..Default::default()
183            })),
184            instance_type: Some(crate::schemars08::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars08::schema::InstanceType::Object))),
185            object: Some(std::boxed::Box::new(crate::schemars08::schema::ObjectValidation {
186                properties: [
187                    (
188                        "apiServerID".into(),
189                        crate::schemars08::schema::Schema::Object(crate::schemars08::schema::SchemaObject {
190                            metadata: Some(std::boxed::Box::new(crate::schemars08::schema::Metadata {
191                                description: Some("apiServerID is the ID of the reporting API server.".into()),
192                                ..Default::default()
193                            })),
194                            instance_type: Some(crate::schemars08::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars08::schema::InstanceType::String))),
195                            ..Default::default()
196                        }),
197                    ),
198                    (
199                        "decodableVersions".into(),
200                        crate::schemars08::schema::Schema::Object(crate::schemars08::schema::SchemaObject {
201                            metadata: Some(std::boxed::Box::new(crate::schemars08::schema::Metadata {
202                                description: Some("decodableVersions are the encoding versions the API server can handle to decode. The API server can decode objects encoded in these versions. The encodingVersion must be included in the decodableVersions.".into()),
203                                ..Default::default()
204                            })),
205                            instance_type: Some(crate::schemars08::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars08::schema::InstanceType::Array))),
206                            array: Some(std::boxed::Box::new(crate::schemars08::schema::ArrayValidation {
207                                items: Some(crate::schemars08::schema::SingleOrVec::Single(std::boxed::Box::new(
208                                    crate::schemars08::schema::Schema::Object(crate::schemars08::schema::SchemaObject {
209                                        instance_type: Some(crate::schemars08::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars08::schema::InstanceType::String))),
210                                        ..Default::default()
211                                    })
212                                ))),
213                                ..Default::default()
214                            })),
215                            ..Default::default()
216                        }),
217                    ),
218                    (
219                        "encodingVersion".into(),
220                        crate::schemars08::schema::Schema::Object(crate::schemars08::schema::SchemaObject {
221                            metadata: Some(std::boxed::Box::new(crate::schemars08::schema::Metadata {
222                                description: Some("encodingVersion the API server encodes the object to when persisting it in the backend (e.g., etcd).".into()),
223                                ..Default::default()
224                            })),
225                            instance_type: Some(crate::schemars08::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars08::schema::InstanceType::String))),
226                            ..Default::default()
227                        }),
228                    ),
229                    (
230                        "servedVersions".into(),
231                        crate::schemars08::schema::Schema::Object(crate::schemars08::schema::SchemaObject {
232                            metadata: Some(std::boxed::Box::new(crate::schemars08::schema::Metadata {
233                                description: Some("servedVersions lists all versions the API server can serve. DecodableVersions must include all ServedVersions.".into()),
234                                ..Default::default()
235                            })),
236                            instance_type: Some(crate::schemars08::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars08::schema::InstanceType::Array))),
237                            array: Some(std::boxed::Box::new(crate::schemars08::schema::ArrayValidation {
238                                items: Some(crate::schemars08::schema::SingleOrVec::Single(std::boxed::Box::new(
239                                    crate::schemars08::schema::Schema::Object(crate::schemars08::schema::SchemaObject {
240                                        instance_type: Some(crate::schemars08::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars08::schema::InstanceType::String))),
241                                        ..Default::default()
242                                    })
243                                ))),
244                                ..Default::default()
245                            })),
246                            ..Default::default()
247                        }),
248                    ),
249                ].into(),
250                required: [
251                    "apiServerID".into(),
252                    "decodableVersions".into(),
253                    "encodingVersion".into(),
254                ].into(),
255                ..Default::default()
256            })),
257            ..Default::default()
258        })
259    }
260}