1#[derive(Clone, Debug, Default, PartialEq)]
5pub struct JSONSchemaProps {
6 pub ref_path: Option<std::string::String>,
7
8 pub schema: Option<std::string::String>,
9
10 pub additional_items: Option<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaPropsOrBool>,
11
12 pub additional_properties: Option<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaPropsOrBool>,
13
14 pub all_of: Option<std::vec::Vec<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaProps>>,
15
16 pub any_of: Option<std::vec::Vec<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaProps>>,
17
18 pub default: Option<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSON>,
20
21 pub definitions: Option<std::collections::BTreeMap<std::string::String, crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaProps>>,
22
23 pub dependencies: Option<std::collections::BTreeMap<std::string::String, crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaPropsOrStringArray>>,
24
25 pub description: Option<std::string::String>,
26
27 pub enum_: Option<std::vec::Vec<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSON>>,
28
29 pub example: Option<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSON>,
30
31 pub exclusive_maximum: Option<bool>,
32
33 pub exclusive_minimum: Option<bool>,
34
35 pub external_docs: Option<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::ExternalDocumentation>,
36
37 pub format: Option<std::string::String>,
41
42 pub id: Option<std::string::String>,
43
44 pub items: Option<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaPropsOrArray>,
45
46 pub max_items: Option<i64>,
47
48 pub max_length: Option<i64>,
49
50 pub max_properties: Option<i64>,
51
52 pub maximum: Option<f64>,
53
54 pub min_items: Option<i64>,
55
56 pub min_length: Option<i64>,
57
58 pub min_properties: Option<i64>,
59
60 pub minimum: Option<f64>,
61
62 pub multiple_of: Option<f64>,
63
64 pub not: Option<std::boxed::Box<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaProps>>,
65
66 pub nullable: Option<bool>,
67
68 pub one_of: Option<std::vec::Vec<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaProps>>,
69
70 pub pattern: Option<std::string::String>,
71
72 pub pattern_properties: Option<std::collections::BTreeMap<std::string::String, crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaProps>>,
73
74 pub properties: Option<std::collections::BTreeMap<std::string::String, crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaProps>>,
75
76 pub required: Option<std::vec::Vec<std::string::String>>,
77
78 pub title: Option<std::string::String>,
79
80 pub type_: Option<std::string::String>,
81
82 pub unique_items: Option<bool>,
83
84 pub x_kubernetes_embedded_resource: Option<bool>,
86
87 pub x_kubernetes_int_or_string: Option<bool>,
98
99 pub x_kubernetes_list_map_keys: Option<std::vec::Vec<std::string::String>>,
105
106 pub x_kubernetes_list_type: Option<std::string::String>,
121
122 pub x_kubernetes_map_type: Option<std::string::String>,
131
132 pub x_kubernetes_preserve_unknown_fields: Option<bool>,
134
135 pub x_kubernetes_validations: Option<std::vec::Vec<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::ValidationRule>>,
137}
138
139impl crate::DeepMerge for JSONSchemaProps {
140 fn merge_from(&mut self, other: Self) {
141 crate::DeepMerge::merge_from(&mut self.ref_path, other.ref_path);
142 crate::DeepMerge::merge_from(&mut self.schema, other.schema);
143 crate::DeepMerge::merge_from(&mut self.additional_items, other.additional_items);
144 crate::DeepMerge::merge_from(&mut self.additional_properties, other.additional_properties);
145 crate::merge_strategies::list::atomic(&mut self.all_of, other.all_of);
146 crate::merge_strategies::list::atomic(&mut self.any_of, other.any_of);
147 crate::DeepMerge::merge_from(&mut self.default, other.default);
148 crate::merge_strategies::map::granular(&mut self.definitions, other.definitions, |current_item, other_item| {
149 crate::DeepMerge::merge_from(current_item, other_item);
150 });
151 crate::merge_strategies::map::granular(&mut self.dependencies, other.dependencies, |current_item, other_item| {
152 crate::DeepMerge::merge_from(current_item, other_item);
153 });
154 crate::DeepMerge::merge_from(&mut self.description, other.description);
155 crate::merge_strategies::list::atomic(&mut self.enum_, other.enum_);
156 crate::DeepMerge::merge_from(&mut self.example, other.example);
157 crate::DeepMerge::merge_from(&mut self.exclusive_maximum, other.exclusive_maximum);
158 crate::DeepMerge::merge_from(&mut self.exclusive_minimum, other.exclusive_minimum);
159 crate::DeepMerge::merge_from(&mut self.external_docs, other.external_docs);
160 crate::DeepMerge::merge_from(&mut self.format, other.format);
161 crate::DeepMerge::merge_from(&mut self.id, other.id);
162 crate::DeepMerge::merge_from(&mut self.items, other.items);
163 crate::DeepMerge::merge_from(&mut self.max_items, other.max_items);
164 crate::DeepMerge::merge_from(&mut self.max_length, other.max_length);
165 crate::DeepMerge::merge_from(&mut self.max_properties, other.max_properties);
166 crate::DeepMerge::merge_from(&mut self.maximum, other.maximum);
167 crate::DeepMerge::merge_from(&mut self.min_items, other.min_items);
168 crate::DeepMerge::merge_from(&mut self.min_length, other.min_length);
169 crate::DeepMerge::merge_from(&mut self.min_properties, other.min_properties);
170 crate::DeepMerge::merge_from(&mut self.minimum, other.minimum);
171 crate::DeepMerge::merge_from(&mut self.multiple_of, other.multiple_of);
172 crate::DeepMerge::merge_from(&mut self.not, other.not);
173 crate::DeepMerge::merge_from(&mut self.nullable, other.nullable);
174 crate::merge_strategies::list::atomic(&mut self.one_of, other.one_of);
175 crate::DeepMerge::merge_from(&mut self.pattern, other.pattern);
176 crate::merge_strategies::map::granular(&mut self.pattern_properties, other.pattern_properties, |current_item, other_item| {
177 crate::DeepMerge::merge_from(current_item, other_item);
178 });
179 crate::merge_strategies::map::granular(&mut self.properties, other.properties, |current_item, other_item| {
180 crate::DeepMerge::merge_from(current_item, other_item);
181 });
182 crate::merge_strategies::list::atomic(&mut self.required, other.required);
183 crate::DeepMerge::merge_from(&mut self.title, other.title);
184 crate::DeepMerge::merge_from(&mut self.type_, other.type_);
185 crate::DeepMerge::merge_from(&mut self.unique_items, other.unique_items);
186 crate::DeepMerge::merge_from(&mut self.x_kubernetes_embedded_resource, other.x_kubernetes_embedded_resource);
187 crate::DeepMerge::merge_from(&mut self.x_kubernetes_int_or_string, other.x_kubernetes_int_or_string);
188 crate::merge_strategies::list::atomic(&mut self.x_kubernetes_list_map_keys, other.x_kubernetes_list_map_keys);
189 crate::DeepMerge::merge_from(&mut self.x_kubernetes_list_type, other.x_kubernetes_list_type);
190 crate::DeepMerge::merge_from(&mut self.x_kubernetes_map_type, other.x_kubernetes_map_type);
191 crate::DeepMerge::merge_from(&mut self.x_kubernetes_preserve_unknown_fields, other.x_kubernetes_preserve_unknown_fields);
192 crate::merge_strategies::list::map(
193 &mut self.x_kubernetes_validations,
194 other.x_kubernetes_validations,
195 &[|lhs, rhs| lhs.rule == rhs.rule],
196 |current_item, other_item| {
197 crate::DeepMerge::merge_from(current_item, other_item);
198 },
199 );
200 }
201}
202
203impl<'de> crate::serde::Deserialize<'de> for JSONSchemaProps {
204 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
205 #[allow(non_camel_case_types)]
206 enum Field {
207 Key_ref_path,
208 Key_schema,
209 Key_additional_items,
210 Key_additional_properties,
211 Key_all_of,
212 Key_any_of,
213 Key_default,
214 Key_definitions,
215 Key_dependencies,
216 Key_description,
217 Key_enum_,
218 Key_example,
219 Key_exclusive_maximum,
220 Key_exclusive_minimum,
221 Key_external_docs,
222 Key_format,
223 Key_id,
224 Key_items,
225 Key_max_items,
226 Key_max_length,
227 Key_max_properties,
228 Key_maximum,
229 Key_min_items,
230 Key_min_length,
231 Key_min_properties,
232 Key_minimum,
233 Key_multiple_of,
234 Key_not,
235 Key_nullable,
236 Key_one_of,
237 Key_pattern,
238 Key_pattern_properties,
239 Key_properties,
240 Key_required,
241 Key_title,
242 Key_type_,
243 Key_unique_items,
244 Key_x_kubernetes_embedded_resource,
245 Key_x_kubernetes_int_or_string,
246 Key_x_kubernetes_list_map_keys,
247 Key_x_kubernetes_list_type,
248 Key_x_kubernetes_map_type,
249 Key_x_kubernetes_preserve_unknown_fields,
250 Key_x_kubernetes_validations,
251 Other,
252 }
253
254 impl<'de> crate::serde::Deserialize<'de> for Field {
255 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
256 struct Visitor;
257
258 impl crate::serde::de::Visitor<'_> for Visitor {
259 type Value = Field;
260
261 fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
262 f.write_str("field identifier")
263 }
264
265 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
266 Ok(match v {
267 "$ref" => Field::Key_ref_path,
268 "$schema" => Field::Key_schema,
269 "additionalItems" => Field::Key_additional_items,
270 "additionalProperties" => Field::Key_additional_properties,
271 "allOf" => Field::Key_all_of,
272 "anyOf" => Field::Key_any_of,
273 "default" => Field::Key_default,
274 "definitions" => Field::Key_definitions,
275 "dependencies" => Field::Key_dependencies,
276 "description" => Field::Key_description,
277 "enum" => Field::Key_enum_,
278 "example" => Field::Key_example,
279 "exclusiveMaximum" => Field::Key_exclusive_maximum,
280 "exclusiveMinimum" => Field::Key_exclusive_minimum,
281 "externalDocs" => Field::Key_external_docs,
282 "format" => Field::Key_format,
283 "id" => Field::Key_id,
284 "items" => Field::Key_items,
285 "maxItems" => Field::Key_max_items,
286 "maxLength" => Field::Key_max_length,
287 "maxProperties" => Field::Key_max_properties,
288 "maximum" => Field::Key_maximum,
289 "minItems" => Field::Key_min_items,
290 "minLength" => Field::Key_min_length,
291 "minProperties" => Field::Key_min_properties,
292 "minimum" => Field::Key_minimum,
293 "multipleOf" => Field::Key_multiple_of,
294 "not" => Field::Key_not,
295 "nullable" => Field::Key_nullable,
296 "oneOf" => Field::Key_one_of,
297 "pattern" => Field::Key_pattern,
298 "patternProperties" => Field::Key_pattern_properties,
299 "properties" => Field::Key_properties,
300 "required" => Field::Key_required,
301 "title" => Field::Key_title,
302 "type" => Field::Key_type_,
303 "uniqueItems" => Field::Key_unique_items,
304 "x-kubernetes-embedded-resource" => Field::Key_x_kubernetes_embedded_resource,
305 "x-kubernetes-int-or-string" => Field::Key_x_kubernetes_int_or_string,
306 "x-kubernetes-list-map-keys" => Field::Key_x_kubernetes_list_map_keys,
307 "x-kubernetes-list-type" => Field::Key_x_kubernetes_list_type,
308 "x-kubernetes-map-type" => Field::Key_x_kubernetes_map_type,
309 "x-kubernetes-preserve-unknown-fields" => Field::Key_x_kubernetes_preserve_unknown_fields,
310 "x-kubernetes-validations" => Field::Key_x_kubernetes_validations,
311 _ => Field::Other,
312 })
313 }
314 }
315
316 deserializer.deserialize_identifier(Visitor)
317 }
318 }
319
320 struct Visitor;
321
322 impl<'de> crate::serde::de::Visitor<'de> for Visitor {
323 type Value = JSONSchemaProps;
324
325 fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
326 f.write_str("JSONSchemaProps")
327 }
328
329 fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
330 let mut value_ref_path: Option<std::string::String> = None;
331 let mut value_schema: Option<std::string::String> = None;
332 let mut value_additional_items: Option<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaPropsOrBool> = None;
333 let mut value_additional_properties: Option<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaPropsOrBool> = None;
334 let mut value_all_of: Option<std::vec::Vec<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaProps>> = None;
335 let mut value_any_of: Option<std::vec::Vec<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaProps>> = None;
336 let mut value_default: Option<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSON> = None;
337 let mut value_definitions: Option<std::collections::BTreeMap<std::string::String, crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaProps>> = None;
338 let mut value_dependencies: Option<std::collections::BTreeMap<std::string::String, crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaPropsOrStringArray>> = None;
339 let mut value_description: Option<std::string::String> = None;
340 let mut value_enum_: Option<std::vec::Vec<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSON>> = None;
341 let mut value_example: Option<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSON> = None;
342 let mut value_exclusive_maximum: Option<bool> = None;
343 let mut value_exclusive_minimum: Option<bool> = None;
344 let mut value_external_docs: Option<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::ExternalDocumentation> = None;
345 let mut value_format: Option<std::string::String> = None;
346 let mut value_id: Option<std::string::String> = None;
347 let mut value_items: Option<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaPropsOrArray> = None;
348 let mut value_max_items: Option<i64> = None;
349 let mut value_max_length: Option<i64> = None;
350 let mut value_max_properties: Option<i64> = None;
351 let mut value_maximum: Option<f64> = None;
352 let mut value_min_items: Option<i64> = None;
353 let mut value_min_length: Option<i64> = None;
354 let mut value_min_properties: Option<i64> = None;
355 let mut value_minimum: Option<f64> = None;
356 let mut value_multiple_of: Option<f64> = None;
357 let mut value_not: Option<std::boxed::Box<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaProps>> = None;
358 let mut value_nullable: Option<bool> = None;
359 let mut value_one_of: Option<std::vec::Vec<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaProps>> = None;
360 let mut value_pattern: Option<std::string::String> = None;
361 let mut value_pattern_properties: Option<std::collections::BTreeMap<std::string::String, crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaProps>> = None;
362 let mut value_properties: Option<std::collections::BTreeMap<std::string::String, crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaProps>> = None;
363 let mut value_required: Option<std::vec::Vec<std::string::String>> = None;
364 let mut value_title: Option<std::string::String> = None;
365 let mut value_type_: Option<std::string::String> = None;
366 let mut value_unique_items: Option<bool> = None;
367 let mut value_x_kubernetes_embedded_resource: Option<bool> = None;
368 let mut value_x_kubernetes_int_or_string: Option<bool> = None;
369 let mut value_x_kubernetes_list_map_keys: Option<std::vec::Vec<std::string::String>> = None;
370 let mut value_x_kubernetes_list_type: Option<std::string::String> = None;
371 let mut value_x_kubernetes_map_type: Option<std::string::String> = None;
372 let mut value_x_kubernetes_preserve_unknown_fields: Option<bool> = None;
373 let mut value_x_kubernetes_validations: Option<std::vec::Vec<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::ValidationRule>> = None;
374
375 while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
376 match key {
377 Field::Key_ref_path => value_ref_path = crate::serde::de::MapAccess::next_value(&mut map)?,
378 Field::Key_schema => value_schema = crate::serde::de::MapAccess::next_value(&mut map)?,
379 Field::Key_additional_items => value_additional_items = crate::serde::de::MapAccess::next_value(&mut map)?,
380 Field::Key_additional_properties => value_additional_properties = crate::serde::de::MapAccess::next_value(&mut map)?,
381 Field::Key_all_of => value_all_of = crate::serde::de::MapAccess::next_value(&mut map)?,
382 Field::Key_any_of => value_any_of = crate::serde::de::MapAccess::next_value(&mut map)?,
383 Field::Key_default => value_default = crate::serde::de::MapAccess::next_value(&mut map)?,
384 Field::Key_definitions => value_definitions = crate::serde::de::MapAccess::next_value(&mut map)?,
385 Field::Key_dependencies => value_dependencies = crate::serde::de::MapAccess::next_value(&mut map)?,
386 Field::Key_description => value_description = crate::serde::de::MapAccess::next_value(&mut map)?,
387 Field::Key_enum_ => value_enum_ = crate::serde::de::MapAccess::next_value(&mut map)?,
388 Field::Key_example => value_example = crate::serde::de::MapAccess::next_value(&mut map)?,
389 Field::Key_exclusive_maximum => value_exclusive_maximum = crate::serde::de::MapAccess::next_value(&mut map)?,
390 Field::Key_exclusive_minimum => value_exclusive_minimum = crate::serde::de::MapAccess::next_value(&mut map)?,
391 Field::Key_external_docs => value_external_docs = crate::serde::de::MapAccess::next_value(&mut map)?,
392 Field::Key_format => value_format = crate::serde::de::MapAccess::next_value(&mut map)?,
393 Field::Key_id => value_id = crate::serde::de::MapAccess::next_value(&mut map)?,
394 Field::Key_items => value_items = crate::serde::de::MapAccess::next_value(&mut map)?,
395 Field::Key_max_items => value_max_items = crate::serde::de::MapAccess::next_value(&mut map)?,
396 Field::Key_max_length => value_max_length = crate::serde::de::MapAccess::next_value(&mut map)?,
397 Field::Key_max_properties => value_max_properties = crate::serde::de::MapAccess::next_value(&mut map)?,
398 Field::Key_maximum => value_maximum = crate::serde::de::MapAccess::next_value(&mut map)?,
399 Field::Key_min_items => value_min_items = crate::serde::de::MapAccess::next_value(&mut map)?,
400 Field::Key_min_length => value_min_length = crate::serde::de::MapAccess::next_value(&mut map)?,
401 Field::Key_min_properties => value_min_properties = crate::serde::de::MapAccess::next_value(&mut map)?,
402 Field::Key_minimum => value_minimum = crate::serde::de::MapAccess::next_value(&mut map)?,
403 Field::Key_multiple_of => value_multiple_of = crate::serde::de::MapAccess::next_value(&mut map)?,
404 Field::Key_not => value_not = crate::serde::de::MapAccess::next_value(&mut map)?,
405 Field::Key_nullable => value_nullable = crate::serde::de::MapAccess::next_value(&mut map)?,
406 Field::Key_one_of => value_one_of = crate::serde::de::MapAccess::next_value(&mut map)?,
407 Field::Key_pattern => value_pattern = crate::serde::de::MapAccess::next_value(&mut map)?,
408 Field::Key_pattern_properties => value_pattern_properties = crate::serde::de::MapAccess::next_value(&mut map)?,
409 Field::Key_properties => value_properties = crate::serde::de::MapAccess::next_value(&mut map)?,
410 Field::Key_required => value_required = crate::serde::de::MapAccess::next_value(&mut map)?,
411 Field::Key_title => value_title = crate::serde::de::MapAccess::next_value(&mut map)?,
412 Field::Key_type_ => value_type_ = crate::serde::de::MapAccess::next_value(&mut map)?,
413 Field::Key_unique_items => value_unique_items = crate::serde::de::MapAccess::next_value(&mut map)?,
414 Field::Key_x_kubernetes_embedded_resource => value_x_kubernetes_embedded_resource = crate::serde::de::MapAccess::next_value(&mut map)?,
415 Field::Key_x_kubernetes_int_or_string => value_x_kubernetes_int_or_string = crate::serde::de::MapAccess::next_value(&mut map)?,
416 Field::Key_x_kubernetes_list_map_keys => value_x_kubernetes_list_map_keys = crate::serde::de::MapAccess::next_value(&mut map)?,
417 Field::Key_x_kubernetes_list_type => value_x_kubernetes_list_type = crate::serde::de::MapAccess::next_value(&mut map)?,
418 Field::Key_x_kubernetes_map_type => value_x_kubernetes_map_type = crate::serde::de::MapAccess::next_value(&mut map)?,
419 Field::Key_x_kubernetes_preserve_unknown_fields => value_x_kubernetes_preserve_unknown_fields = crate::serde::de::MapAccess::next_value(&mut map)?,
420 Field::Key_x_kubernetes_validations => value_x_kubernetes_validations = crate::serde::de::MapAccess::next_value(&mut map)?,
421 Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
422 }
423 }
424
425 Ok(JSONSchemaProps {
426 ref_path: value_ref_path,
427 schema: value_schema,
428 additional_items: value_additional_items,
429 additional_properties: value_additional_properties,
430 all_of: value_all_of,
431 any_of: value_any_of,
432 default: value_default,
433 definitions: value_definitions,
434 dependencies: value_dependencies,
435 description: value_description,
436 enum_: value_enum_,
437 example: value_example,
438 exclusive_maximum: value_exclusive_maximum,
439 exclusive_minimum: value_exclusive_minimum,
440 external_docs: value_external_docs,
441 format: value_format,
442 id: value_id,
443 items: value_items,
444 max_items: value_max_items,
445 max_length: value_max_length,
446 max_properties: value_max_properties,
447 maximum: value_maximum,
448 min_items: value_min_items,
449 min_length: value_min_length,
450 min_properties: value_min_properties,
451 minimum: value_minimum,
452 multiple_of: value_multiple_of,
453 not: value_not,
454 nullable: value_nullable,
455 one_of: value_one_of,
456 pattern: value_pattern,
457 pattern_properties: value_pattern_properties,
458 properties: value_properties,
459 required: value_required,
460 title: value_title,
461 type_: value_type_,
462 unique_items: value_unique_items,
463 x_kubernetes_embedded_resource: value_x_kubernetes_embedded_resource,
464 x_kubernetes_int_or_string: value_x_kubernetes_int_or_string,
465 x_kubernetes_list_map_keys: value_x_kubernetes_list_map_keys,
466 x_kubernetes_list_type: value_x_kubernetes_list_type,
467 x_kubernetes_map_type: value_x_kubernetes_map_type,
468 x_kubernetes_preserve_unknown_fields: value_x_kubernetes_preserve_unknown_fields,
469 x_kubernetes_validations: value_x_kubernetes_validations,
470 })
471 }
472 }
473
474 deserializer.deserialize_struct(
475 "JSONSchemaProps",
476 &[
477 "$ref",
478 "$schema",
479 "additionalItems",
480 "additionalProperties",
481 "allOf",
482 "anyOf",
483 "default",
484 "definitions",
485 "dependencies",
486 "description",
487 "enum",
488 "example",
489 "exclusiveMaximum",
490 "exclusiveMinimum",
491 "externalDocs",
492 "format",
493 "id",
494 "items",
495 "maxItems",
496 "maxLength",
497 "maxProperties",
498 "maximum",
499 "minItems",
500 "minLength",
501 "minProperties",
502 "minimum",
503 "multipleOf",
504 "not",
505 "nullable",
506 "oneOf",
507 "pattern",
508 "patternProperties",
509 "properties",
510 "required",
511 "title",
512 "type",
513 "uniqueItems",
514 "x-kubernetes-embedded-resource",
515 "x-kubernetes-int-or-string",
516 "x-kubernetes-list-map-keys",
517 "x-kubernetes-list-type",
518 "x-kubernetes-map-type",
519 "x-kubernetes-preserve-unknown-fields",
520 "x-kubernetes-validations",
521 ],
522 Visitor,
523 )
524 }
525}
526
527impl crate::serde::Serialize for JSONSchemaProps {
528 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
529 let mut state = serializer.serialize_struct(
530 "JSONSchemaProps",
531 self.ref_path.as_ref().map_or(0, |_| 1) +
532 self.schema.as_ref().map_or(0, |_| 1) +
533 self.additional_items.as_ref().map_or(0, |_| 1) +
534 self.additional_properties.as_ref().map_or(0, |_| 1) +
535 self.all_of.as_ref().map_or(0, |_| 1) +
536 self.any_of.as_ref().map_or(0, |_| 1) +
537 self.default.as_ref().map_or(0, |_| 1) +
538 self.definitions.as_ref().map_or(0, |_| 1) +
539 self.dependencies.as_ref().map_or(0, |_| 1) +
540 self.description.as_ref().map_or(0, |_| 1) +
541 self.enum_.as_ref().map_or(0, |_| 1) +
542 self.example.as_ref().map_or(0, |_| 1) +
543 self.exclusive_maximum.as_ref().map_or(0, |_| 1) +
544 self.exclusive_minimum.as_ref().map_or(0, |_| 1) +
545 self.external_docs.as_ref().map_or(0, |_| 1) +
546 self.format.as_ref().map_or(0, |_| 1) +
547 self.id.as_ref().map_or(0, |_| 1) +
548 self.items.as_ref().map_or(0, |_| 1) +
549 self.max_items.as_ref().map_or(0, |_| 1) +
550 self.max_length.as_ref().map_or(0, |_| 1) +
551 self.max_properties.as_ref().map_or(0, |_| 1) +
552 self.maximum.as_ref().map_or(0, |_| 1) +
553 self.min_items.as_ref().map_or(0, |_| 1) +
554 self.min_length.as_ref().map_or(0, |_| 1) +
555 self.min_properties.as_ref().map_or(0, |_| 1) +
556 self.minimum.as_ref().map_or(0, |_| 1) +
557 self.multiple_of.as_ref().map_or(0, |_| 1) +
558 self.not.as_ref().map_or(0, |_| 1) +
559 self.nullable.as_ref().map_or(0, |_| 1) +
560 self.one_of.as_ref().map_or(0, |_| 1) +
561 self.pattern.as_ref().map_or(0, |_| 1) +
562 self.pattern_properties.as_ref().map_or(0, |_| 1) +
563 self.properties.as_ref().map_or(0, |_| 1) +
564 self.required.as_ref().map_or(0, |_| 1) +
565 self.title.as_ref().map_or(0, |_| 1) +
566 self.type_.as_ref().map_or(0, |_| 1) +
567 self.unique_items.as_ref().map_or(0, |_| 1) +
568 self.x_kubernetes_embedded_resource.as_ref().map_or(0, |_| 1) +
569 self.x_kubernetes_int_or_string.as_ref().map_or(0, |_| 1) +
570 self.x_kubernetes_list_map_keys.as_ref().map_or(0, |_| 1) +
571 self.x_kubernetes_list_type.as_ref().map_or(0, |_| 1) +
572 self.x_kubernetes_map_type.as_ref().map_or(0, |_| 1) +
573 self.x_kubernetes_preserve_unknown_fields.as_ref().map_or(0, |_| 1) +
574 self.x_kubernetes_validations.as_ref().map_or(0, |_| 1),
575 )?;
576 if let Some(value) = &self.ref_path {
577 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "$ref", value)?;
578 }
579 if let Some(value) = &self.schema {
580 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "$schema", value)?;
581 }
582 if let Some(value) = &self.additional_items {
583 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "additionalItems", value)?;
584 }
585 if let Some(value) = &self.additional_properties {
586 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "additionalProperties", value)?;
587 }
588 if let Some(value) = &self.all_of {
589 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "allOf", value)?;
590 }
591 if let Some(value) = &self.any_of {
592 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "anyOf", value)?;
593 }
594 if let Some(value) = &self.default {
595 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "default", value)?;
596 }
597 if let Some(value) = &self.definitions {
598 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "definitions", value)?;
599 }
600 if let Some(value) = &self.dependencies {
601 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "dependencies", value)?;
602 }
603 if let Some(value) = &self.description {
604 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "description", value)?;
605 }
606 if let Some(value) = &self.enum_ {
607 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "enum", value)?;
608 }
609 if let Some(value) = &self.example {
610 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "example", value)?;
611 }
612 if let Some(value) = &self.exclusive_maximum {
613 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "exclusiveMaximum", value)?;
614 }
615 if let Some(value) = &self.exclusive_minimum {
616 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "exclusiveMinimum", value)?;
617 }
618 if let Some(value) = &self.external_docs {
619 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "externalDocs", value)?;
620 }
621 if let Some(value) = &self.format {
622 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "format", value)?;
623 }
624 if let Some(value) = &self.id {
625 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "id", value)?;
626 }
627 if let Some(value) = &self.items {
628 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "items", value)?;
629 }
630 if let Some(value) = &self.max_items {
631 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "maxItems", value)?;
632 }
633 if let Some(value) = &self.max_length {
634 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "maxLength", value)?;
635 }
636 if let Some(value) = &self.max_properties {
637 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "maxProperties", value)?;
638 }
639 if let Some(value) = &self.maximum {
640 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "maximum", value)?;
641 }
642 if let Some(value) = &self.min_items {
643 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "minItems", value)?;
644 }
645 if let Some(value) = &self.min_length {
646 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "minLength", value)?;
647 }
648 if let Some(value) = &self.min_properties {
649 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "minProperties", value)?;
650 }
651 if let Some(value) = &self.minimum {
652 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "minimum", value)?;
653 }
654 if let Some(value) = &self.multiple_of {
655 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "multipleOf", value)?;
656 }
657 if let Some(value) = &self.not {
658 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "not", value)?;
659 }
660 if let Some(value) = &self.nullable {
661 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "nullable", value)?;
662 }
663 if let Some(value) = &self.one_of {
664 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "oneOf", value)?;
665 }
666 if let Some(value) = &self.pattern {
667 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "pattern", value)?;
668 }
669 if let Some(value) = &self.pattern_properties {
670 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "patternProperties", value)?;
671 }
672 if let Some(value) = &self.properties {
673 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "properties", value)?;
674 }
675 if let Some(value) = &self.required {
676 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "required", value)?;
677 }
678 if let Some(value) = &self.title {
679 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "title", value)?;
680 }
681 if let Some(value) = &self.type_ {
682 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "type", value)?;
683 }
684 if let Some(value) = &self.unique_items {
685 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "uniqueItems", value)?;
686 }
687 if let Some(value) = &self.x_kubernetes_embedded_resource {
688 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "x-kubernetes-embedded-resource", value)?;
689 }
690 if let Some(value) = &self.x_kubernetes_int_or_string {
691 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "x-kubernetes-int-or-string", value)?;
692 }
693 if let Some(value) = &self.x_kubernetes_list_map_keys {
694 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "x-kubernetes-list-map-keys", value)?;
695 }
696 if let Some(value) = &self.x_kubernetes_list_type {
697 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "x-kubernetes-list-type", value)?;
698 }
699 if let Some(value) = &self.x_kubernetes_map_type {
700 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "x-kubernetes-map-type", value)?;
701 }
702 if let Some(value) = &self.x_kubernetes_preserve_unknown_fields {
703 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "x-kubernetes-preserve-unknown-fields", value)?;
704 }
705 if let Some(value) = &self.x_kubernetes_validations {
706 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "x-kubernetes-validations", value)?;
707 }
708 crate::serde::ser::SerializeStruct::end(state)
709 }
710}
711
712#[cfg(feature = "schemars")]
713impl crate::schemars::JsonSchema for JSONSchemaProps {
714 fn schema_name() -> std::borrow::Cow<'static, str> {
715 "io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps".into()
716 }
717
718 fn json_schema(__gen: &mut crate::schemars::SchemaGenerator) -> crate::schemars::Schema {
719 crate::schemars::json_schema!({
720 "description": "JSONSchemaProps is a JSON-Schema following Specification Draft 4 (http://json-schema.org/).",
721 "type": "object",
722 "properties": {
723 "$ref": {
724 "type": "string",
725 },
726 "$schema": {
727 "type": "string",
728 },
729 "additionalItems": __gen.subschema_for::<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaPropsOrBool>(),
730 "additionalProperties": __gen.subschema_for::<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaPropsOrBool>(),
731 "allOf": {
732 "type": "array",
733 "items": (__gen.subschema_for::<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaProps>()),
734 },
735 "anyOf": {
736 "type": "array",
737 "items": (__gen.subschema_for::<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaProps>()),
738 },
739 "default": ({
740 let mut schema_obj = __gen.subschema_for::<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSON>();
741 schema_obj.ensure_object().insert("description".into(), "default is a default value for undefined object fields. Defaulting is a beta feature under the CustomResourceDefaulting feature gate. Defaulting requires spec.preserveUnknownFields to be false.".into());
742 schema_obj
743 }),
744 "definitions": {
745 "type": "object",
746 "additionalProperties": (__gen.subschema_for::<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaProps>()),
747 },
748 "dependencies": {
749 "type": "object",
750 "additionalProperties": (__gen.subschema_for::<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaPropsOrStringArray>()),
751 },
752 "description": {
753 "type": "string",
754 },
755 "enum": {
756 "type": "array",
757 "items": (__gen.subschema_for::<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSON>()),
758 },
759 "example": __gen.subschema_for::<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSON>(),
760 "exclusiveMaximum": {
761 "type": "boolean",
762 },
763 "exclusiveMinimum": {
764 "type": "boolean",
765 },
766 "externalDocs": __gen.subschema_for::<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::ExternalDocumentation>(),
767 "format": {
768 "description": "format is an OpenAPI v3 format string. Unknown formats are ignored. The following formats are validated:\n\n- bsonobjectid: a bson object ID, i.e. a 24 characters hex string - uri: an URI as parsed by Golang net/url.ParseRequestURI - email: an email address as parsed by Golang net/mail.ParseAddress - hostname: a valid representation for an Internet host name, as defined by RFC 1034, section 3.1 [RFC1034]. - ipv4: an IPv4 IP as parsed by Golang net.ParseIP - ipv6: an IPv6 IP as parsed by Golang net.ParseIP - cidr: a CIDR as parsed by Golang net.ParseCIDR - mac: a MAC address as parsed by Golang net.ParseMAC - uuid: an UUID that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$ - uuid3: an UUID3 that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?3[0-9a-f]{3}-?[0-9a-f]{4}-?[0-9a-f]{12}$ - uuid4: an UUID4 that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?4[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$ - uuid5: an UUID5 that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?5[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$ - isbn: an ISBN10 or ISBN13 number string like \"0321751043\" or \"978-0321751041\" - isbn10: an ISBN10 number string like \"0321751043\" - isbn13: an ISBN13 number string like \"978-0321751041\" - creditcard: a credit card number defined by the regex ^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\\\d{3})\\\\d{11})$ with any non digit characters mixed in - ssn: a U.S. social security number following the regex ^\\\\d{3}[- ]?\\\\d{2}[- ]?\\\\d{4}$ - hexcolor: an hexadecimal color code like \"#FFFFFF: following the regex ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$ - rgbcolor: an RGB color code like rgb like \"rgb(255,255,2559\" - byte: base64 encoded binary data - password: any kind of string - date: a date string like \"2006-01-02\" as defined by full-date in RFC3339 - duration: a duration string like \"22 ns\" as parsed by Golang time.ParseDuration or compatible with Scala duration format - datetime: a date time string like \"2014-12-15T19:30:20.000Z\" as defined by date-time in RFC3339.",
769 "type": "string",
770 },
771 "id": {
772 "type": "string",
773 },
774 "items": __gen.subschema_for::<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaPropsOrArray>(),
775 "maxItems": {
776 "type": "integer",
777 "format": "int64",
778 },
779 "maxLength": {
780 "type": "integer",
781 "format": "int64",
782 },
783 "maxProperties": {
784 "type": "integer",
785 "format": "int64",
786 },
787 "maximum": {
788 "type": "number",
789 "format": "double",
790 },
791 "minItems": {
792 "type": "integer",
793 "format": "int64",
794 },
795 "minLength": {
796 "type": "integer",
797 "format": "int64",
798 },
799 "minProperties": {
800 "type": "integer",
801 "format": "int64",
802 },
803 "minimum": {
804 "type": "number",
805 "format": "double",
806 },
807 "multipleOf": {
808 "type": "number",
809 "format": "double",
810 },
811 "not": __gen.subschema_for::<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaProps>(),
812 "nullable": {
813 "type": "boolean",
814 },
815 "oneOf": {
816 "type": "array",
817 "items": (__gen.subschema_for::<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaProps>()),
818 },
819 "pattern": {
820 "type": "string",
821 },
822 "patternProperties": {
823 "type": "object",
824 "additionalProperties": (__gen.subschema_for::<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaProps>()),
825 },
826 "properties": {
827 "type": "object",
828 "additionalProperties": (__gen.subschema_for::<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::JSONSchemaProps>()),
829 },
830 "required": {
831 "type": "array",
832 "items": {
833 "type": "string",
834 },
835 },
836 "title": {
837 "type": "string",
838 },
839 "type": {
840 "type": "string",
841 },
842 "uniqueItems": {
843 "type": "boolean",
844 },
845 "x-kubernetes-embedded-resource": {
846 "description": "x-kubernetes-embedded-resource defines that the value is an embedded Kubernetes runtime.Object, with TypeMeta and ObjectMeta. The type must be object. It is allowed to further restrict the embedded object. kind, apiVersion and metadata are validated automatically. x-kubernetes-preserve-unknown-fields is allowed to be true, but does not have to be if the object is fully specified (up to kind, apiVersion, metadata).",
847 "type": "boolean",
848 },
849 "x-kubernetes-int-or-string": {
850 "description": "x-kubernetes-int-or-string specifies that this value is either an integer or a string. If this is true, an empty type is allowed and type as child of anyOf is permitted if following one of the following patterns:\n\n1) anyOf:\n - type: integer\n - type: string\n2) allOf:\n - anyOf:\n - type: integer\n - type: string\n - ... zero or more",
851 "type": "boolean",
852 },
853 "x-kubernetes-list-map-keys": {
854 "description": "x-kubernetes-list-map-keys annotates an array with the x-kubernetes-list-type `map` by specifying the keys used as the index of the map.\n\nThis tag MUST only be used on lists that have the \"x-kubernetes-list-type\" extension set to \"map\". Also, the values specified for this attribute must be a scalar typed field of the child structure (no nesting is supported).\n\nThe properties specified must either be required or have a default value, to ensure those properties are present for all list items.",
855 "type": "array",
856 "items": {
857 "type": "string",
858 },
859 },
860 "x-kubernetes-list-type": {
861 "description": "x-kubernetes-list-type annotates an array to further describe its topology. This extension must only be used on lists and may have 3 possible values:\n\n1) `atomic`: the list is treated as a single entity, like a scalar.\n Atomic lists will be entirely replaced when updated. This extension\n may be used on any type of list (struct, scalar, ...).\n2) `set`:\n Sets are lists that must not have multiple items with the same value. Each\n value must be a scalar, an object with x-kubernetes-map-type `atomic` or an\n array with x-kubernetes-list-type `atomic`.\n3) `map`:\n These lists are like maps in that their elements have a non-index key\n used to identify them. Order is preserved upon merge. The map tag\n must only be used on a list with elements of type object.\nDefaults to atomic for arrays.",
862 "type": "string",
863 },
864 "x-kubernetes-map-type": {
865 "description": "x-kubernetes-map-type annotates an object to further describe its topology. This extension must only be used when type is object and may have 2 possible values:\n\n1) `granular`:\n These maps are actual maps (key-value pairs) and each fields are independent\n from each other (they can each be manipulated by separate actors). This is\n the default behaviour for all maps.\n2) `atomic`: the list is treated as a single entity, like a scalar.\n Atomic maps will be entirely replaced when updated.",
866 "type": "string",
867 },
868 "x-kubernetes-preserve-unknown-fields": {
869 "description": "x-kubernetes-preserve-unknown-fields stops the API server decoding step from pruning fields which are not specified in the validation schema. This affects fields recursively, but switches back to normal pruning behaviour if nested properties or additionalProperties are specified in the schema. This can either be true or undefined. False is forbidden.",
870 "type": "boolean",
871 },
872 "x-kubernetes-validations": {
873 "description": "x-kubernetes-validations describes a list of validation rules written in the CEL expression language.",
874 "type": "array",
875 "items": (__gen.subschema_for::<crate::apiextensions_apiserver::pkg::apis::apiextensions::v1::ValidationRule>()),
876 },
877 },
878 })
879 }
880}