1// Generated from definition io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup
23/// APIGroup contains the name, the supported versions, and the preferred version of a group.
4#[derive(Clone, Debug, Default, PartialEq)]
5pub struct APIGroup {
6/// name is the name of the group.
7pub name: String,
89/// preferredVersion is the version preferred by the API server, which probably is the storage version.
10pub preferred_version: Option<crate::apimachinery::pkg::apis::meta::v1::GroupVersionForDiscovery>,
1112/// 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.
13pub server_address_by_client_cidrs: Option<Vec<crate::apimachinery::pkg::apis::meta::v1::ServerAddressByClientCIDR>>,
1415/// versions are the versions supported in this group.
16pub versions: Vec<crate::apimachinery::pkg::apis::meta::v1::GroupVersionForDiscovery>,
17}
1819impl crate::Resource for APIGroup {
20const API_VERSION: &'static str = "v1";
21const GROUP: &'static str = "";
22const KIND: &'static str = "APIGroup";
23const VERSION: &'static str = "v1";
24const URL_PATH_SEGMENT: &'static str = "";
25type Scope = crate::ClusterResourceScope;
26}
2728impl crate::DeepMerge for APIGroup {
29fn merge_from(&mut self, other: Self) {
30crate::DeepMerge::merge_from(&mut self.name, other.name);
31crate::DeepMerge::merge_from(&mut self.preferred_version, other.preferred_version);
32crate::merge_strategies::list::atomic(&mut self.server_address_by_client_cidrs, other.server_address_by_client_cidrs);
33crate::merge_strategies::list::atomic(&mut self.versions, other.versions);
34 }
35}
3637impl<'de> crate::serde::Deserialize<'de> for APIGroup {
38fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
39#[allow(non_camel_case_types)]
40enum Field {
41 Key_api_version,
42 Key_kind,
43 Key_name,
44 Key_preferred_version,
45 Key_server_address_by_client_cidrs,
46 Key_versions,
47 Other,
48 }
4950impl<'de> crate::serde::Deserialize<'de> for Field {
51fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
52struct Visitor;
5354impl<'de> crate::serde::de::Visitor<'de> for Visitor {
55type Value = Field;
5657fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
58 f.write_str("field identifier")
59 }
6061fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
62Ok(match v {
63"apiVersion" => Field::Key_api_version,
64"kind" => Field::Key_kind,
65"name" => Field::Key_name,
66"preferredVersion" => Field::Key_preferred_version,
67"serverAddressByClientCIDRs" => Field::Key_server_address_by_client_cidrs,
68"versions" => Field::Key_versions,
69_ => Field::Other,
70 })
71 }
72 }
7374 deserializer.deserialize_identifier(Visitor)
75 }
76 }
7778struct Visitor;
7980impl<'de> crate::serde::de::Visitor<'de> for Visitor {
81type Value = APIGroup;
8283fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
84 f.write_str(<Self::Value as crate::Resource>::KIND)
85 }
8687fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
88let mut value_name: Option<String> = None;
89let mut value_preferred_version: Option<crate::apimachinery::pkg::apis::meta::v1::GroupVersionForDiscovery> = None;
90let mut value_server_address_by_client_cidrs: Option<Vec<crate::apimachinery::pkg::apis::meta::v1::ServerAddressByClientCIDR>> = None;
91let mut value_versions: Option<Vec<crate::apimachinery::pkg::apis::meta::v1::GroupVersionForDiscovery>> = None;
9293while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
94match key {
95 Field::Key_api_version => {
96let value_api_version: String = crate::serde::de::MapAccess::next_value(&mut map)?;
97if value_api_version != <Self::Value as crate::Resource>::API_VERSION {
98return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_api_version), &<Self::Value as crate::Resource>::API_VERSION));
99 }
100 },
101 Field::Key_kind => {
102let value_kind: String = crate::serde::de::MapAccess::next_value(&mut map)?;
103if value_kind != <Self::Value as crate::Resource>::KIND {
104return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_kind), &<Self::Value as crate::Resource>::KIND));
105 }
106 },
107 Field::Key_name => value_name = crate::serde::de::MapAccess::next_value(&mut map)?,
108 Field::Key_preferred_version => value_preferred_version = crate::serde::de::MapAccess::next_value(&mut map)?,
109 Field::Key_server_address_by_client_cidrs => value_server_address_by_client_cidrs = crate::serde::de::MapAccess::next_value(&mut map)?,
110 Field::Key_versions => value_versions = crate::serde::de::MapAccess::next_value(&mut map)?,
111 Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
112 }
113 }
114115Ok(APIGroup {
116 name: value_name.unwrap_or_default(),
117 preferred_version: value_preferred_version,
118 server_address_by_client_cidrs: value_server_address_by_client_cidrs,
119 versions: value_versions.unwrap_or_default(),
120 })
121 }
122 }
123124 deserializer.deserialize_struct(
125 <Self as crate::Resource>::KIND,
126&[
127"apiVersion",
128"kind",
129"name",
130"preferredVersion",
131"serverAddressByClientCIDRs",
132"versions",
133 ],
134 Visitor,
135 )
136 }
137}
138139impl crate::serde::Serialize for APIGroup {
140fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
141let mut state = serializer.serialize_struct(
142 <Self as crate::Resource>::KIND,
1434 +
144self.preferred_version.as_ref().map_or(0, |_| 1) +
145self.server_address_by_client_cidrs.as_ref().map_or(0, |_| 1),
146 )?;
147crate::serde::ser::SerializeStruct::serialize_field(&mut state, "apiVersion", <Self as crate::Resource>::API_VERSION)?;
148crate::serde::ser::SerializeStruct::serialize_field(&mut state, "kind", <Self as crate::Resource>::KIND)?;
149crate::serde::ser::SerializeStruct::serialize_field(&mut state, "name", &self.name)?;
150if let Some(value) = &self.preferred_version {
151crate::serde::ser::SerializeStruct::serialize_field(&mut state, "preferredVersion", value)?;
152 }
153if let Some(value) = &self.server_address_by_client_cidrs {
154crate::serde::ser::SerializeStruct::serialize_field(&mut state, "serverAddressByClientCIDRs", value)?;
155 }
156crate::serde::ser::SerializeStruct::serialize_field(&mut state, "versions", &self.versions)?;
157crate::serde::ser::SerializeStruct::end(state)
158 }
159}
160161#[cfg(feature = "schemars")]
162impl crate::schemars::JsonSchema for APIGroup {
163fn schema_name() -> String {
164"io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup".to_owned()
165 }
166167fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
168crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
169 metadata: Some(Box::new(crate::schemars::schema::Metadata {
170 description: Some("APIGroup contains the name, the supported versions, and the preferred version of a group.".to_owned()),
171 ..Default::default()
172 })),
173 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Object))),
174 object: Some(Box::new(crate::schemars::schema::ObjectValidation {
175 properties: [
176 (
177"apiVersion".to_owned(),
178crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
179 metadata: Some(Box::new(crate::schemars::schema::Metadata {
180 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()),
181 ..Default::default()
182 })),
183 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
184 ..Default::default()
185 }),
186 ),
187 (
188"kind".to_owned(),
189crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
190 metadata: Some(Box::new(crate::schemars::schema::Metadata {
191 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()),
192 ..Default::default()
193 })),
194 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
195 ..Default::default()
196 }),
197 ),
198 (
199"name".to_owned(),
200crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
201 metadata: Some(Box::new(crate::schemars::schema::Metadata {
202 description: Some("name is the name of the group.".to_owned()),
203 ..Default::default()
204 })),
205 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
206 ..Default::default()
207 }),
208 ),
209 (
210"preferredVersion".to_owned(),
211 {
212let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::GroupVersionForDiscovery>().into_object();
213 schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
214 description: Some("preferredVersion is the version preferred by the API server, which probably is the storage version.".to_owned()),
215 ..Default::default()
216 }));
217crate::schemars::schema::Schema::Object(schema_obj)
218 },
219 ),
220 (
221"serverAddressByClientCIDRs".to_owned(),
222crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
223 metadata: Some(Box::new(crate::schemars::schema::Metadata {
224 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()),
225 ..Default::default()
226 })),
227 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Array))),
228 array: Some(Box::new(crate::schemars::schema::ArrayValidation {
229 items: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(__gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::ServerAddressByClientCIDR>()))),
230 ..Default::default()
231 })),
232 ..Default::default()
233 }),
234 ),
235 (
236"versions".to_owned(),
237crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
238 metadata: Some(Box::new(crate::schemars::schema::Metadata {
239 description: Some("versions are the versions supported in this group.".to_owned()),
240 ..Default::default()
241 })),
242 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Array))),
243 array: Some(Box::new(crate::schemars::schema::ArrayValidation {
244 items: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(__gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::GroupVersionForDiscovery>()))),
245 ..Default::default()
246 })),
247 ..Default::default()
248 }),
249 ),
250 ].into(),
251 required: [
252"name".to_owned(),
253"versions".to_owned(),
254 ].into(),
255 ..Default::default()
256 })),
257 ..Default::default()
258 })
259 }
260}