k8s_openapi/v1_31/apimachinery/pkg/apis/meta/v1/
api_group.rs1#[derive(Clone, Debug, Default, PartialEq)]
5pub struct APIGroup {
6 pub name: std::string::String,
8
9 pub preferred_version: Option<crate::apimachinery::pkg::apis::meta::v1::GroupVersionForDiscovery>,
11
12 pub server_address_by_client_cidrs: Option<std::vec::Vec<crate::apimachinery::pkg::apis::meta::v1::ServerAddressByClientCIDR>>,
14
15 pub versions: std::vec::Vec<crate::apimachinery::pkg::apis::meta::v1::GroupVersionForDiscovery>,
17}
18
19impl crate::Resource for APIGroup {
20 const API_VERSION: &'static str = "v1";
21 const GROUP: &'static str = "";
22 const KIND: &'static str = "APIGroup";
23 const VERSION: &'static str = "v1";
24 const URL_PATH_SEGMENT: &'static str = "";
25 type Scope = crate::ClusterResourceScope;
26}
27
28impl crate::DeepMerge for APIGroup {
29 fn merge_from(&mut self, other: Self) {
30 crate::DeepMerge::merge_from(&mut self.name, other.name);
31 crate::DeepMerge::merge_from(&mut self.preferred_version, other.preferred_version);
32 crate::merge_strategies::list::atomic(&mut self.server_address_by_client_cidrs, other.server_address_by_client_cidrs);
33 crate::merge_strategies::list::atomic(&mut self.versions, other.versions);
34 }
35}
36
37impl<'de> crate::serde::Deserialize<'de> for APIGroup {
38 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
39 #[allow(non_camel_case_types)]
40 enum 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 }
49
50 impl<'de> crate::serde::Deserialize<'de> for Field {
51 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
52 struct Visitor;
53
54 impl crate::serde::de::Visitor<'_> for Visitor {
55 type Value = Field;
56
57 fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
58 f.write_str("field identifier")
59 }
60
61 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
62 Ok(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 }
73
74 deserializer.deserialize_identifier(Visitor)
75 }
76 }
77
78 struct Visitor;
79
80 impl<'de> crate::serde::de::Visitor<'de> for Visitor {
81 type Value = APIGroup;
82
83 fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
84 f.write_str(<Self::Value as crate::Resource>::KIND)
85 }
86
87 fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
88 let mut value_name: Option<std::string::String> = None;
89 let mut value_preferred_version: Option<crate::apimachinery::pkg::apis::meta::v1::GroupVersionForDiscovery> = None;
90 let mut value_server_address_by_client_cidrs: Option<std::vec::Vec<crate::apimachinery::pkg::apis::meta::v1::ServerAddressByClientCIDR>> = None;
91 let mut value_versions: Option<std::vec::Vec<crate::apimachinery::pkg::apis::meta::v1::GroupVersionForDiscovery>> = None;
92
93 while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
94 match key {
95 Field::Key_api_version => {
96 let value_api_version: std::string::String = crate::serde::de::MapAccess::next_value(&mut map)?;
97 if value_api_version != <Self::Value as crate::Resource>::API_VERSION {
98 return 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 => {
102 let value_kind: std::string::String = crate::serde::de::MapAccess::next_value(&mut map)?;
103 if value_kind != <Self::Value as crate::Resource>::KIND {
104 return 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 }
114
115 Ok(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 }
123
124 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}
138
139impl crate::serde::Serialize for APIGroup {
140 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
141 let mut state = serializer.serialize_struct(
142 <Self as crate::Resource>::KIND,
143 4 +
144 self.preferred_version.as_ref().map_or(0, |_| 1) +
145 self.server_address_by_client_cidrs.as_ref().map_or(0, |_| 1),
146 )?;
147 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "apiVersion", <Self as crate::Resource>::API_VERSION)?;
148 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "kind", <Self as crate::Resource>::KIND)?;
149 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "name", &self.name)?;
150 if let Some(value) = &self.preferred_version {
151 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "preferredVersion", value)?;
152 }
153 if let Some(value) = &self.server_address_by_client_cidrs {
154 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "serverAddressByClientCIDRs", value)?;
155 }
156 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "versions", &self.versions)?;
157 crate::serde::ser::SerializeStruct::end(state)
158 }
159}
160
161#[cfg(feature = "schemars")]
162impl crate::schemars::JsonSchema for APIGroup {
163 fn schema_name() -> std::string::String {
164 "io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup".into()
165 }
166
167 fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
168 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
169 metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
170 description: Some("APIGroup contains the name, the supported versions, and the preferred version of a group.".into()),
171 ..Default::default()
172 })),
173 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::Object))),
174 object: Some(std::boxed::Box::new(crate::schemars::schema::ObjectValidation {
175 properties: [
176 (
177 "apiVersion".into(),
178 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
179 metadata: Some(std::boxed::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".into()),
181 ..Default::default()
182 })),
183 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::String))),
184 ..Default::default()
185 }),
186 ),
187 (
188 "kind".into(),
189 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
190 metadata: Some(std::boxed::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".into()),
192 ..Default::default()
193 })),
194 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::String))),
195 ..Default::default()
196 }),
197 ),
198 (
199 "name".into(),
200 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
201 metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
202 description: Some("name is the name of the group.".into()),
203 ..Default::default()
204 })),
205 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::String))),
206 ..Default::default()
207 }),
208 ),
209 (
210 "preferredVersion".into(),
211 {
212 let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::GroupVersionForDiscovery>().into_object();
213 schema_obj.metadata = Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
214 description: Some("preferredVersion is the version preferred by the API server, which probably is the storage version.".into()),
215 ..Default::default()
216 }));
217 crate::schemars::schema::Schema::Object(schema_obj)
218 },
219 ),
220 (
221 "serverAddressByClientCIDRs".into(),
222 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
223 metadata: Some(std::boxed::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.".into()),
225 ..Default::default()
226 })),
227 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::Array))),
228 array: Some(std::boxed::Box::new(crate::schemars::schema::ArrayValidation {
229 items: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(__gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::ServerAddressByClientCIDR>()))),
230 ..Default::default()
231 })),
232 ..Default::default()
233 }),
234 ),
235 (
236 "versions".into(),
237 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
238 metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
239 description: Some("versions are the versions supported in this group.".into()),
240 ..Default::default()
241 })),
242 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::Array))),
243 array: Some(std::boxed::Box::new(crate::schemars::schema::ArrayValidation {
244 items: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::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".into(),
253 "versions".into(),
254 ].into(),
255 ..Default::default()
256 })),
257 ..Default::default()
258 })
259 }
260}