k8s_openapi/v1_32/api/apps/v1/
controller_revision.rs

1// Generated from definition io.k8s.api.apps.v1.ControllerRevision
2
3/// ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.
4#[derive(Clone, Debug, Default, PartialEq)]
5pub struct ControllerRevision {
6    /// Data is the serialized representation of the state.
7    pub data: Option<crate::apimachinery::pkg::runtime::RawExtension>,
8
9    /// Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
10    pub metadata: crate::apimachinery::pkg::apis::meta::v1::ObjectMeta,
11
12    /// Revision indicates the revision of the state represented by Data.
13    pub revision: i64,
14}
15
16impl crate::Resource for ControllerRevision {
17    const API_VERSION: &'static str = "apps/v1";
18    const GROUP: &'static str = "apps";
19    const KIND: &'static str = "ControllerRevision";
20    const VERSION: &'static str = "v1";
21    const URL_PATH_SEGMENT: &'static str = "controllerrevisions";
22    type Scope = crate::NamespaceResourceScope;
23}
24
25impl crate::ListableResource for ControllerRevision {
26    const LIST_KIND: &'static str = "ControllerRevisionList";
27}
28
29impl crate::Metadata for ControllerRevision {
30    type Ty = crate::apimachinery::pkg::apis::meta::v1::ObjectMeta;
31
32    fn metadata(&self) -> &<Self as crate::Metadata>::Ty {
33        &self.metadata
34    }
35
36    fn metadata_mut(&mut self) -> &mut<Self as crate::Metadata>::Ty {
37        &mut self.metadata
38    }
39}
40
41impl crate::DeepMerge for ControllerRevision {
42    fn merge_from(&mut self, other: Self) {
43        crate::DeepMerge::merge_from(&mut self.data, other.data);
44        crate::DeepMerge::merge_from(&mut self.metadata, other.metadata);
45        crate::DeepMerge::merge_from(&mut self.revision, other.revision);
46    }
47}
48
49impl<'de> crate::serde::Deserialize<'de> for ControllerRevision {
50    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
51        #[allow(non_camel_case_types)]
52        enum Field {
53            Key_api_version,
54            Key_kind,
55            Key_data,
56            Key_metadata,
57            Key_revision,
58            Other,
59        }
60
61        impl<'de> crate::serde::Deserialize<'de> for Field {
62            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
63                struct Visitor;
64
65                impl crate::serde::de::Visitor<'_> for Visitor {
66                    type Value = Field;
67
68                    fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
69                        f.write_str("field identifier")
70                    }
71
72                    fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
73                        Ok(match v {
74                            "apiVersion" => Field::Key_api_version,
75                            "kind" => Field::Key_kind,
76                            "data" => Field::Key_data,
77                            "metadata" => Field::Key_metadata,
78                            "revision" => Field::Key_revision,
79                            _ => Field::Other,
80                        })
81                    }
82                }
83
84                deserializer.deserialize_identifier(Visitor)
85            }
86        }
87
88        struct Visitor;
89
90        impl<'de> crate::serde::de::Visitor<'de> for Visitor {
91            type Value = ControllerRevision;
92
93            fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
94                f.write_str(<Self::Value as crate::Resource>::KIND)
95            }
96
97            fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
98                let mut value_data: Option<crate::apimachinery::pkg::runtime::RawExtension> = None;
99                let mut value_metadata: Option<crate::apimachinery::pkg::apis::meta::v1::ObjectMeta> = None;
100                let mut value_revision: Option<i64> = None;
101
102                while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
103                    match key {
104                        Field::Key_api_version => {
105                            let value_api_version: String = crate::serde::de::MapAccess::next_value(&mut map)?;
106                            if value_api_version != <Self::Value as crate::Resource>::API_VERSION {
107                                return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_api_version), &<Self::Value as crate::Resource>::API_VERSION));
108                            }
109                        },
110                        Field::Key_kind => {
111                            let value_kind: String = crate::serde::de::MapAccess::next_value(&mut map)?;
112                            if value_kind != <Self::Value as crate::Resource>::KIND {
113                                return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_kind), &<Self::Value as crate::Resource>::KIND));
114                            }
115                        },
116                        Field::Key_data => value_data = crate::serde::de::MapAccess::next_value(&mut map)?,
117                        Field::Key_metadata => value_metadata = crate::serde::de::MapAccess::next_value(&mut map)?,
118                        Field::Key_revision => value_revision = crate::serde::de::MapAccess::next_value(&mut map)?,
119                        Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
120                    }
121                }
122
123                Ok(ControllerRevision {
124                    data: value_data,
125                    metadata: value_metadata.unwrap_or_default(),
126                    revision: value_revision.unwrap_or_default(),
127                })
128            }
129        }
130
131        deserializer.deserialize_struct(
132            <Self as crate::Resource>::KIND,
133            &[
134                "apiVersion",
135                "kind",
136                "data",
137                "metadata",
138                "revision",
139            ],
140            Visitor,
141        )
142    }
143}
144
145impl crate::serde::Serialize for ControllerRevision {
146    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
147        let mut state = serializer.serialize_struct(
148            <Self as crate::Resource>::KIND,
149            4 +
150            self.data.as_ref().map_or(0, |_| 1),
151        )?;
152        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "apiVersion", <Self as crate::Resource>::API_VERSION)?;
153        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "kind", <Self as crate::Resource>::KIND)?;
154        if let Some(value) = &self.data {
155            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "data", value)?;
156        }
157        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "metadata", &self.metadata)?;
158        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "revision", &self.revision)?;
159        crate::serde::ser::SerializeStruct::end(state)
160    }
161}
162
163#[cfg(feature = "schemars")]
164impl crate::schemars::JsonSchema for ControllerRevision {
165    fn schema_name() -> String {
166        "io.k8s.api.apps.v1.ControllerRevision".to_owned()
167    }
168
169    fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
170        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
171            metadata: Some(Box::new(crate::schemars::schema::Metadata {
172                description: Some("ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.".to_owned()),
173                ..Default::default()
174            })),
175            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Object))),
176            object: Some(Box::new(crate::schemars::schema::ObjectValidation {
177                properties: [
178                    (
179                        "apiVersion".to_owned(),
180                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
181                            metadata: Some(Box::new(crate::schemars::schema::Metadata {
182                                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()),
183                                ..Default::default()
184                            })),
185                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
186                            ..Default::default()
187                        }),
188                    ),
189                    (
190                        "data".to_owned(),
191                        {
192                            let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::runtime::RawExtension>().into_object();
193                            schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
194                                description: Some("Data is the serialized representation of the state.".to_owned()),
195                                ..Default::default()
196                            }));
197                            crate::schemars::schema::Schema::Object(schema_obj)
198                        },
199                    ),
200                    (
201                        "kind".to_owned(),
202                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
203                            metadata: Some(Box::new(crate::schemars::schema::Metadata {
204                                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()),
205                                ..Default::default()
206                            })),
207                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
208                            ..Default::default()
209                        }),
210                    ),
211                    (
212                        "metadata".to_owned(),
213                        {
214                            let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::ObjectMeta>().into_object();
215                            schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
216                                description: Some("Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata".to_owned()),
217                                ..Default::default()
218                            }));
219                            crate::schemars::schema::Schema::Object(schema_obj)
220                        },
221                    ),
222                    (
223                        "revision".to_owned(),
224                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
225                            metadata: Some(Box::new(crate::schemars::schema::Metadata {
226                                description: Some("Revision indicates the revision of the state represented by Data.".to_owned()),
227                                ..Default::default()
228                            })),
229                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Integer))),
230                            format: Some("int64".to_owned()),
231                            ..Default::default()
232                        }),
233                    ),
234                ].into(),
235                required: [
236                    "metadata".to_owned(),
237                    "revision".to_owned(),
238                ].into(),
239                ..Default::default()
240            })),
241            ..Default::default()
242        })
243    }
244}