k8s_openapi/v1_30/api/apps/v1/
replica_set_spec.rs

1// Generated from definition io.k8s.api.apps.v1.ReplicaSetSpec
2
3/// ReplicaSetSpec is the specification of a ReplicaSet.
4#[derive(Clone, Debug, Default, PartialEq)]
5pub struct ReplicaSetSpec {
6    /// Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)
7    pub min_ready_seconds: Option<i32>,
8
9    /// Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller
10    pub replicas: Option<i32>,
11
12    /// Selector is a label query over pods that should match the replica count. Label keys and values that must match in order to be controlled by this replica set. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
13    pub selector: crate::apimachinery::pkg::apis::meta::v1::LabelSelector,
14
15    /// Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template
16    pub template: Option<crate::api::core::v1::PodTemplateSpec>,
17}
18
19impl crate::DeepMerge for ReplicaSetSpec {
20    fn merge_from(&mut self, other: Self) {
21        crate::DeepMerge::merge_from(&mut self.min_ready_seconds, other.min_ready_seconds);
22        crate::DeepMerge::merge_from(&mut self.replicas, other.replicas);
23        crate::DeepMerge::merge_from(&mut self.selector, other.selector);
24        crate::DeepMerge::merge_from(&mut self.template, other.template);
25    }
26}
27
28impl<'de> crate::serde::Deserialize<'de> for ReplicaSetSpec {
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_min_ready_seconds,
33            Key_replicas,
34            Key_selector,
35            Key_template,
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<'de> crate::serde::de::Visitor<'de> for Visitor {
44                    type Value = Field;
45
46                    fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::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                            "minReadySeconds" => Field::Key_min_ready_seconds,
53                            "replicas" => Field::Key_replicas,
54                            "selector" => Field::Key_selector,
55                            "template" => Field::Key_template,
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 = ReplicaSetSpec;
69
70            fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
71                f.write_str("ReplicaSetSpec")
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_min_ready_seconds: Option<i32> = None;
76                let mut value_replicas: Option<i32> = None;
77                let mut value_selector: Option<crate::apimachinery::pkg::apis::meta::v1::LabelSelector> = None;
78                let mut value_template: Option<crate::api::core::v1::PodTemplateSpec> = None;
79
80                while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
81                    match key {
82                        Field::Key_min_ready_seconds => value_min_ready_seconds = crate::serde::de::MapAccess::next_value(&mut map)?,
83                        Field::Key_replicas => value_replicas = crate::serde::de::MapAccess::next_value(&mut map)?,
84                        Field::Key_selector => value_selector = crate::serde::de::MapAccess::next_value(&mut map)?,
85                        Field::Key_template => value_template = 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(ReplicaSetSpec {
91                    min_ready_seconds: value_min_ready_seconds,
92                    replicas: value_replicas,
93                    selector: value_selector.unwrap_or_default(),
94                    template: value_template,
95                })
96            }
97        }
98
99        deserializer.deserialize_struct(
100            "ReplicaSetSpec",
101            &[
102                "minReadySeconds",
103                "replicas",
104                "selector",
105                "template",
106            ],
107            Visitor,
108        )
109    }
110}
111
112impl crate::serde::Serialize for ReplicaSetSpec {
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            "ReplicaSetSpec",
116            1 +
117            self.min_ready_seconds.as_ref().map_or(0, |_| 1) +
118            self.replicas.as_ref().map_or(0, |_| 1) +
119            self.template.as_ref().map_or(0, |_| 1),
120        )?;
121        if let Some(value) = &self.min_ready_seconds {
122            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "minReadySeconds", value)?;
123        }
124        if let Some(value) = &self.replicas {
125            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "replicas", value)?;
126        }
127        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "selector", &self.selector)?;
128        if let Some(value) = &self.template {
129            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "template", value)?;
130        }
131        crate::serde::ser::SerializeStruct::end(state)
132    }
133}
134
135#[cfg(feature = "schemars")]
136impl crate::schemars::JsonSchema for ReplicaSetSpec {
137    fn schema_name() -> String {
138        "io.k8s.api.apps.v1.ReplicaSetSpec".to_owned()
139    }
140
141    fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
142        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
143            metadata: Some(Box::new(crate::schemars::schema::Metadata {
144                description: Some("ReplicaSetSpec is the specification of a ReplicaSet.".to_owned()),
145                ..Default::default()
146            })),
147            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Object))),
148            object: Some(Box::new(crate::schemars::schema::ObjectValidation {
149                properties: [
150                    (
151                        "minReadySeconds".to_owned(),
152                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
153                            metadata: Some(Box::new(crate::schemars::schema::Metadata {
154                                description: Some("Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)".to_owned()),
155                                ..Default::default()
156                            })),
157                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Integer))),
158                            format: Some("int32".to_owned()),
159                            ..Default::default()
160                        }),
161                    ),
162                    (
163                        "replicas".to_owned(),
164                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
165                            metadata: Some(Box::new(crate::schemars::schema::Metadata {
166                                description: Some("Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller".to_owned()),
167                                ..Default::default()
168                            })),
169                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Integer))),
170                            format: Some("int32".to_owned()),
171                            ..Default::default()
172                        }),
173                    ),
174                    (
175                        "selector".to_owned(),
176                        {
177                            let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::LabelSelector>().into_object();
178                            schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
179                                description: Some("Selector is a label query over pods that should match the replica count. Label keys and values that must match in order to be controlled by this replica set. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors".to_owned()),
180                                ..Default::default()
181                            }));
182                            crate::schemars::schema::Schema::Object(schema_obj)
183                        },
184                    ),
185                    (
186                        "template".to_owned(),
187                        {
188                            let mut schema_obj = __gen.subschema_for::<crate::api::core::v1::PodTemplateSpec>().into_object();
189                            schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
190                                description: Some("Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template".to_owned()),
191                                ..Default::default()
192                            }));
193                            crate::schemars::schema::Schema::Object(schema_obj)
194                        },
195                    ),
196                ].into(),
197                required: [
198                    "selector".to_owned(),
199                ].into(),
200                ..Default::default()
201            })),
202            ..Default::default()
203        })
204    }
205}