1// Generated from definition io.k8s.apimachinery.pkg.apis.meta.v1.APIVersions
23/// APIVersions lists the versions that are available, to allow clients to discover the API at /api, which is the root path of the legacy v1 API.
4#[derive(Clone, Debug, Default, PartialEq)]
5pub struct APIVersions {
6/// a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.
7pub server_address_by_client_cidrs: Vec<crate::apimachinery::pkg::apis::meta::v1::ServerAddressByClientCIDR>,
89/// versions are the api versions that are available.
10pub versions: Vec<String>,
11}
1213impl crate::Resource for APIVersions {
14const API_VERSION: &'static str = "v1";
15const GROUP: &'static str = "";
16const KIND: &'static str = "APIVersions";
17const VERSION: &'static str = "v1";
18const URL_PATH_SEGMENT: &'static str = "";
19type Scope = crate::ClusterResourceScope;
20}
2122impl crate::DeepMerge for APIVersions {
23fn merge_from(&mut self, other: Self) {
24crate::merge_strategies::list::atomic(&mut self.server_address_by_client_cidrs, other.server_address_by_client_cidrs);
25crate::merge_strategies::list::atomic(&mut self.versions, other.versions);
26 }
27}
2829impl<'de> crate::serde::Deserialize<'de> for APIVersions {
30fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
31#[allow(non_camel_case_types)]
32enum Field {
33 Key_api_version,
34 Key_kind,
35 Key_server_address_by_client_cidrs,
36 Key_versions,
37 Other,
38 }
3940impl<'de> crate::serde::Deserialize<'de> for Field {
41fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
42struct Visitor;
4344impl<'de> crate::serde::de::Visitor<'de> for Visitor {
45type Value = Field;
4647fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
48 f.write_str("field identifier")
49 }
5051fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
52Ok(match v {
53"apiVersion" => Field::Key_api_version,
54"kind" => Field::Key_kind,
55"serverAddressByClientCIDRs" => Field::Key_server_address_by_client_cidrs,
56"versions" => Field::Key_versions,
57_ => Field::Other,
58 })
59 }
60 }
6162 deserializer.deserialize_identifier(Visitor)
63 }
64 }
6566struct Visitor;
6768impl<'de> crate::serde::de::Visitor<'de> for Visitor {
69type Value = APIVersions;
7071fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
72 f.write_str(<Self::Value as crate::Resource>::KIND)
73 }
7475fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
76let mut value_server_address_by_client_cidrs: Option<Vec<crate::apimachinery::pkg::apis::meta::v1::ServerAddressByClientCIDR>> = None;
77let mut value_versions: Option<Vec<String>> = None;
7879while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
80match key {
81 Field::Key_api_version => {
82let value_api_version: String = crate::serde::de::MapAccess::next_value(&mut map)?;
83if value_api_version != <Self::Value as crate::Resource>::API_VERSION {
84return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_api_version), &<Self::Value as crate::Resource>::API_VERSION));
85 }
86 },
87 Field::Key_kind => {
88let value_kind: String = crate::serde::de::MapAccess::next_value(&mut map)?;
89if value_kind != <Self::Value as crate::Resource>::KIND {
90return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_kind), &<Self::Value as crate::Resource>::KIND));
91 }
92 },
93 Field::Key_server_address_by_client_cidrs => value_server_address_by_client_cidrs = crate::serde::de::MapAccess::next_value(&mut map)?,
94 Field::Key_versions => value_versions = crate::serde::de::MapAccess::next_value(&mut map)?,
95 Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
96 }
97 }
9899Ok(APIVersions {
100 server_address_by_client_cidrs: value_server_address_by_client_cidrs.unwrap_or_default(),
101 versions: value_versions.unwrap_or_default(),
102 })
103 }
104 }
105106 deserializer.deserialize_struct(
107 <Self as crate::Resource>::KIND,
108&[
109"apiVersion",
110"kind",
111"serverAddressByClientCIDRs",
112"versions",
113 ],
114 Visitor,
115 )
116 }
117}
118119impl crate::serde::Serialize for APIVersions {
120fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
121let mut state = serializer.serialize_struct(
122 <Self as crate::Resource>::KIND,
1234,
124 )?;
125crate::serde::ser::SerializeStruct::serialize_field(&mut state, "apiVersion", <Self as crate::Resource>::API_VERSION)?;
126crate::serde::ser::SerializeStruct::serialize_field(&mut state, "kind", <Self as crate::Resource>::KIND)?;
127crate::serde::ser::SerializeStruct::serialize_field(&mut state, "serverAddressByClientCIDRs", &self.server_address_by_client_cidrs)?;
128crate::serde::ser::SerializeStruct::serialize_field(&mut state, "versions", &self.versions)?;
129crate::serde::ser::SerializeStruct::end(state)
130 }
131}
132133#[cfg(feature = "schemars")]
134impl crate::schemars::JsonSchema for APIVersions {
135fn schema_name() -> String {
136"io.k8s.apimachinery.pkg.apis.meta.v1.APIVersions".to_owned()
137 }
138139fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
140crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
141 metadata: Some(Box::new(crate::schemars::schema::Metadata {
142 description: Some("APIVersions lists the versions that are available, to allow clients to discover the API at /api, which is the root path of the legacy v1 API.".to_owned()),
143 ..Default::default()
144 })),
145 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Object))),
146 object: Some(Box::new(crate::schemars::schema::ObjectValidation {
147 properties: [
148 (
149"apiVersion".to_owned(),
150crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
151 metadata: Some(Box::new(crate::schemars::schema::Metadata {
152 description: Some("APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources".to_owned()),
153 ..Default::default()
154 })),
155 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
156 ..Default::default()
157 }),
158 ),
159 (
160"kind".to_owned(),
161crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
162 metadata: Some(Box::new(crate::schemars::schema::Metadata {
163 description: Some("Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds".to_owned()),
164 ..Default::default()
165 })),
166 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
167 ..Default::default()
168 }),
169 ),
170 (
171"serverAddressByClientCIDRs".to_owned(),
172crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
173 metadata: Some(Box::new(crate::schemars::schema::Metadata {
174 description: Some("a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.".to_owned()),
175 ..Default::default()
176 })),
177 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Array))),
178 array: Some(Box::new(crate::schemars::schema::ArrayValidation {
179 items: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(__gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::ServerAddressByClientCIDR>()))),
180 ..Default::default()
181 })),
182 ..Default::default()
183 }),
184 ),
185 (
186"versions".to_owned(),
187crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
188 metadata: Some(Box::new(crate::schemars::schema::Metadata {
189 description: Some("versions are the api versions that are available.".to_owned()),
190 ..Default::default()
191 })),
192 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Array))),
193 array: Some(Box::new(crate::schemars::schema::ArrayValidation {
194 items: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(
195crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
196 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
197 ..Default::default()
198 })
199 ))),
200 ..Default::default()
201 })),
202 ..Default::default()
203 }),
204 ),
205 ].into(),
206 required: [
207"serverAddressByClientCIDRs".to_owned(),
208"versions".to_owned(),
209 ].into(),
210 ..Default::default()
211 })),
212 ..Default::default()
213 })
214 }
215}