k8s_openapi/v1_34/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 core::fmt::Formatter<'_>) -> core::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 core::fmt::Formatter<'_>) -> core::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: std::string::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: std::string::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() -> std::borrow::Cow<'static, str> {
166        "io.k8s.api.apps.v1.ControllerRevision".into()
167    }
168
169    fn json_schema(__gen: &mut crate::schemars::SchemaGenerator) -> crate::schemars::Schema {
170        crate::schemars::json_schema!({
171            "description": "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.",
172            "type": "object",
173            "properties": {
174                "apiVersion": {
175                    "description": "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",
176                    "type": "string",
177                },
178                "data": ({
179                    let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::runtime::RawExtension>();
180                    schema_obj.ensure_object().insert("description".into(), "Data is the serialized representation of the state.".into());
181                    schema_obj
182                }),
183                "kind": {
184                    "description": "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",
185                    "type": "string",
186                },
187                "metadata": ({
188                    let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::ObjectMeta>();
189                    schema_obj.ensure_object().insert("description".into(), "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata".into());
190                    schema_obj
191                }),
192                "revision": {
193                    "description": "Revision indicates the revision of the state represented by Data.",
194                    "type": "integer",
195                    "format": "int64",
196                },
197            },
198            "required": [
199                "metadata",
200                "revision",
201            ],
202        })
203    }
204}