1#[derive(Clone, Debug, Default, PartialEq)]
5pub struct StatefulSetStatus {
6 pub available_replicas: Option<i32>,
8
9 pub collision_count: Option<i32>,
11
12 pub conditions: Option<Vec<crate::api::apps::v1::StatefulSetCondition>>,
14
15 pub current_replicas: Option<i32>,
17
18 pub current_revision: Option<String>,
20
21 pub observed_generation: Option<i64>,
23
24 pub ready_replicas: Option<i32>,
26
27 pub replicas: i32,
29
30 pub update_revision: Option<String>,
32
33 pub updated_replicas: Option<i32>,
35}
36
37impl crate::DeepMerge for StatefulSetStatus {
38 fn merge_from(&mut self, other: Self) {
39 crate::DeepMerge::merge_from(&mut self.available_replicas, other.available_replicas);
40 crate::DeepMerge::merge_from(&mut self.collision_count, other.collision_count);
41 crate::merge_strategies::list::map(
42 &mut self.conditions,
43 other.conditions,
44 &[|lhs, rhs| lhs.type_ == rhs.type_],
45 |current_item, other_item| {
46 crate::DeepMerge::merge_from(current_item, other_item);
47 },
48 );
49 crate::DeepMerge::merge_from(&mut self.current_replicas, other.current_replicas);
50 crate::DeepMerge::merge_from(&mut self.current_revision, other.current_revision);
51 crate::DeepMerge::merge_from(&mut self.observed_generation, other.observed_generation);
52 crate::DeepMerge::merge_from(&mut self.ready_replicas, other.ready_replicas);
53 crate::DeepMerge::merge_from(&mut self.replicas, other.replicas);
54 crate::DeepMerge::merge_from(&mut self.update_revision, other.update_revision);
55 crate::DeepMerge::merge_from(&mut self.updated_replicas, other.updated_replicas);
56 }
57}
58
59impl<'de> crate::serde::Deserialize<'de> for StatefulSetStatus {
60 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
61 #[allow(non_camel_case_types)]
62 enum Field {
63 Key_available_replicas,
64 Key_collision_count,
65 Key_conditions,
66 Key_current_replicas,
67 Key_current_revision,
68 Key_observed_generation,
69 Key_ready_replicas,
70 Key_replicas,
71 Key_update_revision,
72 Key_updated_replicas,
73 Other,
74 }
75
76 impl<'de> crate::serde::Deserialize<'de> for Field {
77 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
78 struct Visitor;
79
80 impl crate::serde::de::Visitor<'_> for Visitor {
81 type Value = Field;
82
83 fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
84 f.write_str("field identifier")
85 }
86
87 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
88 Ok(match v {
89 "availableReplicas" => Field::Key_available_replicas,
90 "collisionCount" => Field::Key_collision_count,
91 "conditions" => Field::Key_conditions,
92 "currentReplicas" => Field::Key_current_replicas,
93 "currentRevision" => Field::Key_current_revision,
94 "observedGeneration" => Field::Key_observed_generation,
95 "readyReplicas" => Field::Key_ready_replicas,
96 "replicas" => Field::Key_replicas,
97 "updateRevision" => Field::Key_update_revision,
98 "updatedReplicas" => Field::Key_updated_replicas,
99 _ => Field::Other,
100 })
101 }
102 }
103
104 deserializer.deserialize_identifier(Visitor)
105 }
106 }
107
108 struct Visitor;
109
110 impl<'de> crate::serde::de::Visitor<'de> for Visitor {
111 type Value = StatefulSetStatus;
112
113 fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
114 f.write_str("StatefulSetStatus")
115 }
116
117 fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
118 let mut value_available_replicas: Option<i32> = None;
119 let mut value_collision_count: Option<i32> = None;
120 let mut value_conditions: Option<Vec<crate::api::apps::v1::StatefulSetCondition>> = None;
121 let mut value_current_replicas: Option<i32> = None;
122 let mut value_current_revision: Option<String> = None;
123 let mut value_observed_generation: Option<i64> = None;
124 let mut value_ready_replicas: Option<i32> = None;
125 let mut value_replicas: Option<i32> = None;
126 let mut value_update_revision: Option<String> = None;
127 let mut value_updated_replicas: Option<i32> = None;
128
129 while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
130 match key {
131 Field::Key_available_replicas => value_available_replicas = crate::serde::de::MapAccess::next_value(&mut map)?,
132 Field::Key_collision_count => value_collision_count = crate::serde::de::MapAccess::next_value(&mut map)?,
133 Field::Key_conditions => value_conditions = crate::serde::de::MapAccess::next_value(&mut map)?,
134 Field::Key_current_replicas => value_current_replicas = crate::serde::de::MapAccess::next_value(&mut map)?,
135 Field::Key_current_revision => value_current_revision = crate::serde::de::MapAccess::next_value(&mut map)?,
136 Field::Key_observed_generation => value_observed_generation = crate::serde::de::MapAccess::next_value(&mut map)?,
137 Field::Key_ready_replicas => value_ready_replicas = crate::serde::de::MapAccess::next_value(&mut map)?,
138 Field::Key_replicas => value_replicas = crate::serde::de::MapAccess::next_value(&mut map)?,
139 Field::Key_update_revision => value_update_revision = crate::serde::de::MapAccess::next_value(&mut map)?,
140 Field::Key_updated_replicas => value_updated_replicas = crate::serde::de::MapAccess::next_value(&mut map)?,
141 Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
142 }
143 }
144
145 Ok(StatefulSetStatus {
146 available_replicas: value_available_replicas,
147 collision_count: value_collision_count,
148 conditions: value_conditions,
149 current_replicas: value_current_replicas,
150 current_revision: value_current_revision,
151 observed_generation: value_observed_generation,
152 ready_replicas: value_ready_replicas,
153 replicas: value_replicas.unwrap_or_default(),
154 update_revision: value_update_revision,
155 updated_replicas: value_updated_replicas,
156 })
157 }
158 }
159
160 deserializer.deserialize_struct(
161 "StatefulSetStatus",
162 &[
163 "availableReplicas",
164 "collisionCount",
165 "conditions",
166 "currentReplicas",
167 "currentRevision",
168 "observedGeneration",
169 "readyReplicas",
170 "replicas",
171 "updateRevision",
172 "updatedReplicas",
173 ],
174 Visitor,
175 )
176 }
177}
178
179impl crate::serde::Serialize for StatefulSetStatus {
180 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
181 let mut state = serializer.serialize_struct(
182 "StatefulSetStatus",
183 1 +
184 self.available_replicas.as_ref().map_or(0, |_| 1) +
185 self.collision_count.as_ref().map_or(0, |_| 1) +
186 self.conditions.as_ref().map_or(0, |_| 1) +
187 self.current_replicas.as_ref().map_or(0, |_| 1) +
188 self.current_revision.as_ref().map_or(0, |_| 1) +
189 self.observed_generation.as_ref().map_or(0, |_| 1) +
190 self.ready_replicas.as_ref().map_or(0, |_| 1) +
191 self.update_revision.as_ref().map_or(0, |_| 1) +
192 self.updated_replicas.as_ref().map_or(0, |_| 1),
193 )?;
194 if let Some(value) = &self.available_replicas {
195 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "availableReplicas", value)?;
196 }
197 if let Some(value) = &self.collision_count {
198 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "collisionCount", value)?;
199 }
200 if let Some(value) = &self.conditions {
201 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "conditions", value)?;
202 }
203 if let Some(value) = &self.current_replicas {
204 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "currentReplicas", value)?;
205 }
206 if let Some(value) = &self.current_revision {
207 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "currentRevision", value)?;
208 }
209 if let Some(value) = &self.observed_generation {
210 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "observedGeneration", value)?;
211 }
212 if let Some(value) = &self.ready_replicas {
213 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "readyReplicas", value)?;
214 }
215 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "replicas", &self.replicas)?;
216 if let Some(value) = &self.update_revision {
217 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "updateRevision", value)?;
218 }
219 if let Some(value) = &self.updated_replicas {
220 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "updatedReplicas", value)?;
221 }
222 crate::serde::ser::SerializeStruct::end(state)
223 }
224}
225
226#[cfg(feature = "schemars")]
227impl crate::schemars::JsonSchema for StatefulSetStatus {
228 fn schema_name() -> String {
229 "io.k8s.api.apps.v1.StatefulSetStatus".to_owned()
230 }
231
232 fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
233 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
234 metadata: Some(Box::new(crate::schemars::schema::Metadata {
235 description: Some("StatefulSetStatus represents the current state of a StatefulSet.".to_owned()),
236 ..Default::default()
237 })),
238 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Object))),
239 object: Some(Box::new(crate::schemars::schema::ObjectValidation {
240 properties: [
241 (
242 "availableReplicas".to_owned(),
243 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
244 metadata: Some(Box::new(crate::schemars::schema::Metadata {
245 description: Some("Total number of available pods (ready for at least minReadySeconds) targeted by this statefulset.".to_owned()),
246 ..Default::default()
247 })),
248 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Integer))),
249 format: Some("int32".to_owned()),
250 ..Default::default()
251 }),
252 ),
253 (
254 "collisionCount".to_owned(),
255 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
256 metadata: Some(Box::new(crate::schemars::schema::Metadata {
257 description: Some("collisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.".to_owned()),
258 ..Default::default()
259 })),
260 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Integer))),
261 format: Some("int32".to_owned()),
262 ..Default::default()
263 }),
264 ),
265 (
266 "conditions".to_owned(),
267 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
268 metadata: Some(Box::new(crate::schemars::schema::Metadata {
269 description: Some("Represents the latest available observations of a statefulset's current state.".to_owned()),
270 ..Default::default()
271 })),
272 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Array))),
273 array: Some(Box::new(crate::schemars::schema::ArrayValidation {
274 items: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(__gen.subschema_for::<crate::api::apps::v1::StatefulSetCondition>()))),
275 ..Default::default()
276 })),
277 ..Default::default()
278 }),
279 ),
280 (
281 "currentReplicas".to_owned(),
282 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
283 metadata: Some(Box::new(crate::schemars::schema::Metadata {
284 description: Some("currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.".to_owned()),
285 ..Default::default()
286 })),
287 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Integer))),
288 format: Some("int32".to_owned()),
289 ..Default::default()
290 }),
291 ),
292 (
293 "currentRevision".to_owned(),
294 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
295 metadata: Some(Box::new(crate::schemars::schema::Metadata {
296 description: Some("currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).".to_owned()),
297 ..Default::default()
298 })),
299 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
300 ..Default::default()
301 }),
302 ),
303 (
304 "observedGeneration".to_owned(),
305 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
306 metadata: Some(Box::new(crate::schemars::schema::Metadata {
307 description: Some("observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.".to_owned()),
308 ..Default::default()
309 })),
310 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Integer))),
311 format: Some("int64".to_owned()),
312 ..Default::default()
313 }),
314 ),
315 (
316 "readyReplicas".to_owned(),
317 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
318 metadata: Some(Box::new(crate::schemars::schema::Metadata {
319 description: Some("readyReplicas is the number of pods created for this StatefulSet with a Ready Condition.".to_owned()),
320 ..Default::default()
321 })),
322 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Integer))),
323 format: Some("int32".to_owned()),
324 ..Default::default()
325 }),
326 ),
327 (
328 "replicas".to_owned(),
329 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
330 metadata: Some(Box::new(crate::schemars::schema::Metadata {
331 description: Some("replicas is the number of Pods created by the StatefulSet controller.".to_owned()),
332 ..Default::default()
333 })),
334 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Integer))),
335 format: Some("int32".to_owned()),
336 ..Default::default()
337 }),
338 ),
339 (
340 "updateRevision".to_owned(),
341 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
342 metadata: Some(Box::new(crate::schemars::schema::Metadata {
343 description: Some("updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)".to_owned()),
344 ..Default::default()
345 })),
346 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
347 ..Default::default()
348 }),
349 ),
350 (
351 "updatedReplicas".to_owned(),
352 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
353 metadata: Some(Box::new(crate::schemars::schema::Metadata {
354 description: Some("updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.".to_owned()),
355 ..Default::default()
356 })),
357 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Integer))),
358 format: Some("int32".to_owned()),
359 ..Default::default()
360 }),
361 ),
362 ].into(),
363 required: [
364 "replicas".to_owned(),
365 ].into(),
366 ..Default::default()
367 })),
368 ..Default::default()
369 })
370 }
371}