k8s_openapi/v1_32/api/certificates/v1alpha1/
cluster_trust_bundle.rs

1// Generated from definition io.k8s.api.certificates.v1alpha1.ClusterTrustBundle
2
3/// ClusterTrustBundle is a cluster-scoped container for X.509 trust anchors (root certificates).
4///
5/// ClusterTrustBundle objects are considered to be readable by any authenticated user in the cluster, because they can be mounted by pods using the `clusterTrustBundle` projection.  All service accounts have read access to ClusterTrustBundles by default.  Users who only have namespace-level access to a cluster can read ClusterTrustBundles by impersonating a serviceaccount that they have access to.
6///
7/// It can be optionally associated with a particular assigner, in which case it contains one valid set of trust anchors for that signer. Signers may have multiple associated ClusterTrustBundles; each is an independent set of trust anchors for that signer. Admission control is used to enforce that only users with permissions on the signer can create or modify the corresponding bundle.
8#[derive(Clone, Debug, Default, PartialEq)]
9pub struct ClusterTrustBundle {
10    /// metadata contains the object metadata.
11    pub metadata: crate::apimachinery::pkg::apis::meta::v1::ObjectMeta,
12
13    /// spec contains the signer (if any) and trust anchors.
14    pub spec: crate::api::certificates::v1alpha1::ClusterTrustBundleSpec,
15}
16
17impl crate::Resource for ClusterTrustBundle {
18    const API_VERSION: &'static str = "certificates.k8s.io/v1alpha1";
19    const GROUP: &'static str = "certificates.k8s.io";
20    const KIND: &'static str = "ClusterTrustBundle";
21    const VERSION: &'static str = "v1alpha1";
22    const URL_PATH_SEGMENT: &'static str = "clustertrustbundles";
23    type Scope = crate::ClusterResourceScope;
24}
25
26impl crate::ListableResource for ClusterTrustBundle {
27    const LIST_KIND: &'static str = "ClusterTrustBundleList";
28}
29
30impl crate::Metadata for ClusterTrustBundle {
31    type Ty = crate::apimachinery::pkg::apis::meta::v1::ObjectMeta;
32
33    fn metadata(&self) -> &<Self as crate::Metadata>::Ty {
34        &self.metadata
35    }
36
37    fn metadata_mut(&mut self) -> &mut<Self as crate::Metadata>::Ty {
38        &mut self.metadata
39    }
40}
41
42impl crate::DeepMerge for ClusterTrustBundle {
43    fn merge_from(&mut self, other: Self) {
44        crate::DeepMerge::merge_from(&mut self.metadata, other.metadata);
45        crate::DeepMerge::merge_from(&mut self.spec, other.spec);
46    }
47}
48
49impl<'de> crate::serde::Deserialize<'de> for ClusterTrustBundle {
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_metadata,
56            Key_spec,
57            Other,
58        }
59
60        impl<'de> crate::serde::Deserialize<'de> for Field {
61            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
62                struct Visitor;
63
64                impl crate::serde::de::Visitor<'_> for Visitor {
65                    type Value = Field;
66
67                    fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
68                        f.write_str("field identifier")
69                    }
70
71                    fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
72                        Ok(match v {
73                            "apiVersion" => Field::Key_api_version,
74                            "kind" => Field::Key_kind,
75                            "metadata" => Field::Key_metadata,
76                            "spec" => Field::Key_spec,
77                            _ => Field::Other,
78                        })
79                    }
80                }
81
82                deserializer.deserialize_identifier(Visitor)
83            }
84        }
85
86        struct Visitor;
87
88        impl<'de> crate::serde::de::Visitor<'de> for Visitor {
89            type Value = ClusterTrustBundle;
90
91            fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
92                f.write_str(<Self::Value as crate::Resource>::KIND)
93            }
94
95            fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
96                let mut value_metadata: Option<crate::apimachinery::pkg::apis::meta::v1::ObjectMeta> = None;
97                let mut value_spec: Option<crate::api::certificates::v1alpha1::ClusterTrustBundleSpec> = None;
98
99                while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
100                    match key {
101                        Field::Key_api_version => {
102                            let value_api_version: String = crate::serde::de::MapAccess::next_value(&mut map)?;
103                            if value_api_version != <Self::Value as crate::Resource>::API_VERSION {
104                                return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_api_version), &<Self::Value as crate::Resource>::API_VERSION));
105                            }
106                        },
107                        Field::Key_kind => {
108                            let value_kind: String = crate::serde::de::MapAccess::next_value(&mut map)?;
109                            if value_kind != <Self::Value as crate::Resource>::KIND {
110                                return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_kind), &<Self::Value as crate::Resource>::KIND));
111                            }
112                        },
113                        Field::Key_metadata => value_metadata = crate::serde::de::MapAccess::next_value(&mut map)?,
114                        Field::Key_spec => value_spec = crate::serde::de::MapAccess::next_value(&mut map)?,
115                        Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
116                    }
117                }
118
119                Ok(ClusterTrustBundle {
120                    metadata: value_metadata.unwrap_or_default(),
121                    spec: value_spec.unwrap_or_default(),
122                })
123            }
124        }
125
126        deserializer.deserialize_struct(
127            <Self as crate::Resource>::KIND,
128            &[
129                "apiVersion",
130                "kind",
131                "metadata",
132                "spec",
133            ],
134            Visitor,
135        )
136    }
137}
138
139impl crate::serde::Serialize for ClusterTrustBundle {
140    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
141        let mut state = serializer.serialize_struct(
142            <Self as crate::Resource>::KIND,
143            4,
144        )?;
145        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "apiVersion", <Self as crate::Resource>::API_VERSION)?;
146        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "kind", <Self as crate::Resource>::KIND)?;
147        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "metadata", &self.metadata)?;
148        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "spec", &self.spec)?;
149        crate::serde::ser::SerializeStruct::end(state)
150    }
151}
152
153#[cfg(feature = "schemars")]
154impl crate::schemars::JsonSchema for ClusterTrustBundle {
155    fn schema_name() -> String {
156        "io.k8s.api.certificates.v1alpha1.ClusterTrustBundle".to_owned()
157    }
158
159    fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
160        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
161            metadata: Some(Box::new(crate::schemars::schema::Metadata {
162                description: Some("ClusterTrustBundle is a cluster-scoped container for X.509 trust anchors (root certificates).\n\nClusterTrustBundle objects are considered to be readable by any authenticated user in the cluster, because they can be mounted by pods using the `clusterTrustBundle` projection.  All service accounts have read access to ClusterTrustBundles by default.  Users who only have namespace-level access to a cluster can read ClusterTrustBundles by impersonating a serviceaccount that they have access to.\n\nIt can be optionally associated with a particular assigner, in which case it contains one valid set of trust anchors for that signer. Signers may have multiple associated ClusterTrustBundles; each is an independent set of trust anchors for that signer. Admission control is used to enforce that only users with permissions on the signer can create or modify the corresponding bundle.".to_owned()),
163                ..Default::default()
164            })),
165            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Object))),
166            object: Some(Box::new(crate::schemars::schema::ObjectValidation {
167                properties: [
168                    (
169                        "apiVersion".to_owned(),
170                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
171                            metadata: Some(Box::new(crate::schemars::schema::Metadata {
172                                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()),
173                                ..Default::default()
174                            })),
175                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
176                            ..Default::default()
177                        }),
178                    ),
179                    (
180                        "kind".to_owned(),
181                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
182                            metadata: Some(Box::new(crate::schemars::schema::Metadata {
183                                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()),
184                                ..Default::default()
185                            })),
186                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
187                            ..Default::default()
188                        }),
189                    ),
190                    (
191                        "metadata".to_owned(),
192                        {
193                            let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::ObjectMeta>().into_object();
194                            schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
195                                description: Some("metadata contains the object metadata.".to_owned()),
196                                ..Default::default()
197                            }));
198                            crate::schemars::schema::Schema::Object(schema_obj)
199                        },
200                    ),
201                    (
202                        "spec".to_owned(),
203                        {
204                            let mut schema_obj = __gen.subschema_for::<crate::api::certificates::v1alpha1::ClusterTrustBundleSpec>().into_object();
205                            schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
206                                description: Some("spec contains the signer (if any) and trust anchors.".to_owned()),
207                                ..Default::default()
208                            }));
209                            crate::schemars::schema::Schema::Object(schema_obj)
210                        },
211                    ),
212                ].into(),
213                required: [
214                    "metadata".to_owned(),
215                    "spec".to_owned(),
216                ].into(),
217                ..Default::default()
218            })),
219            ..Default::default()
220        })
221    }
222}