k8s_openapi/v1_32/api/certificates/v1/
certificate_signing_request.rs1#[derive(Clone, Debug, Default, PartialEq)]
11pub struct CertificateSigningRequest {
12 pub metadata: crate::apimachinery::pkg::apis::meta::v1::ObjectMeta,
13
14 pub spec: crate::api::certificates::v1::CertificateSigningRequestSpec,
16
17 pub status: Option<crate::api::certificates::v1::CertificateSigningRequestStatus>,
19}
20
21impl crate::Resource for CertificateSigningRequest {
22 const API_VERSION: &'static str = "certificates.k8s.io/v1";
23 const GROUP: &'static str = "certificates.k8s.io";
24 const KIND: &'static str = "CertificateSigningRequest";
25 const VERSION: &'static str = "v1";
26 const URL_PATH_SEGMENT: &'static str = "certificatesigningrequests";
27 type Scope = crate::ClusterResourceScope;
28}
29
30impl crate::ListableResource for CertificateSigningRequest {
31 const LIST_KIND: &'static str = "CertificateSigningRequestList";
32}
33
34impl crate::Metadata for CertificateSigningRequest {
35 type Ty = crate::apimachinery::pkg::apis::meta::v1::ObjectMeta;
36
37 fn metadata(&self) -> &<Self as crate::Metadata>::Ty {
38 &self.metadata
39 }
40
41 fn metadata_mut(&mut self) -> &mut<Self as crate::Metadata>::Ty {
42 &mut self.metadata
43 }
44}
45
46impl crate::DeepMerge for CertificateSigningRequest {
47 fn merge_from(&mut self, other: Self) {
48 crate::DeepMerge::merge_from(&mut self.metadata, other.metadata);
49 crate::DeepMerge::merge_from(&mut self.spec, other.spec);
50 crate::DeepMerge::merge_from(&mut self.status, other.status);
51 }
52}
53
54impl<'de> crate::serde::Deserialize<'de> for CertificateSigningRequest {
55 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
56 #[allow(non_camel_case_types)]
57 enum Field {
58 Key_api_version,
59 Key_kind,
60 Key_metadata,
61 Key_spec,
62 Key_status,
63 Other,
64 }
65
66 impl<'de> crate::serde::Deserialize<'de> for Field {
67 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
68 struct Visitor;
69
70 impl crate::serde::de::Visitor<'_> for Visitor {
71 type Value = Field;
72
73 fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
74 f.write_str("field identifier")
75 }
76
77 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
78 Ok(match v {
79 "apiVersion" => Field::Key_api_version,
80 "kind" => Field::Key_kind,
81 "metadata" => Field::Key_metadata,
82 "spec" => Field::Key_spec,
83 "status" => Field::Key_status,
84 _ => Field::Other,
85 })
86 }
87 }
88
89 deserializer.deserialize_identifier(Visitor)
90 }
91 }
92
93 struct Visitor;
94
95 impl<'de> crate::serde::de::Visitor<'de> for Visitor {
96 type Value = CertificateSigningRequest;
97
98 fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
99 f.write_str(<Self::Value as crate::Resource>::KIND)
100 }
101
102 fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
103 let mut value_metadata: Option<crate::apimachinery::pkg::apis::meta::v1::ObjectMeta> = None;
104 let mut value_spec: Option<crate::api::certificates::v1::CertificateSigningRequestSpec> = None;
105 let mut value_status: Option<crate::api::certificates::v1::CertificateSigningRequestStatus> = None;
106
107 while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
108 match key {
109 Field::Key_api_version => {
110 let value_api_version: String = crate::serde::de::MapAccess::next_value(&mut map)?;
111 if value_api_version != <Self::Value as crate::Resource>::API_VERSION {
112 return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_api_version), &<Self::Value as crate::Resource>::API_VERSION));
113 }
114 },
115 Field::Key_kind => {
116 let value_kind: String = crate::serde::de::MapAccess::next_value(&mut map)?;
117 if value_kind != <Self::Value as crate::Resource>::KIND {
118 return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_kind), &<Self::Value as crate::Resource>::KIND));
119 }
120 },
121 Field::Key_metadata => value_metadata = crate::serde::de::MapAccess::next_value(&mut map)?,
122 Field::Key_spec => value_spec = crate::serde::de::MapAccess::next_value(&mut map)?,
123 Field::Key_status => value_status = crate::serde::de::MapAccess::next_value(&mut map)?,
124 Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
125 }
126 }
127
128 Ok(CertificateSigningRequest {
129 metadata: value_metadata.unwrap_or_default(),
130 spec: value_spec.unwrap_or_default(),
131 status: value_status,
132 })
133 }
134 }
135
136 deserializer.deserialize_struct(
137 <Self as crate::Resource>::KIND,
138 &[
139 "apiVersion",
140 "kind",
141 "metadata",
142 "spec",
143 "status",
144 ],
145 Visitor,
146 )
147 }
148}
149
150impl crate::serde::Serialize for CertificateSigningRequest {
151 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
152 let mut state = serializer.serialize_struct(
153 <Self as crate::Resource>::KIND,
154 4 +
155 self.status.as_ref().map_or(0, |_| 1),
156 )?;
157 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "apiVersion", <Self as crate::Resource>::API_VERSION)?;
158 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "kind", <Self as crate::Resource>::KIND)?;
159 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "metadata", &self.metadata)?;
160 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "spec", &self.spec)?;
161 if let Some(value) = &self.status {
162 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "status", value)?;
163 }
164 crate::serde::ser::SerializeStruct::end(state)
165 }
166}
167
168#[cfg(feature = "schemars")]
169impl crate::schemars::JsonSchema for CertificateSigningRequest {
170 fn schema_name() -> String {
171 "io.k8s.api.certificates.v1.CertificateSigningRequest".to_owned()
172 }
173
174 fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
175 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
176 metadata: Some(Box::new(crate::schemars::schema::Metadata {
177 description: Some("CertificateSigningRequest objects provide a mechanism to obtain x509 certificates by submitting a certificate signing request, and having it asynchronously approved and issued.\n\nKubelets use this API to obtain:\n 1. client certificates to authenticate to kube-apiserver (with the \"kubernetes.io/kube-apiserver-client-kubelet\" signerName).\n 2. serving certificates for TLS endpoints kube-apiserver can connect to securely (with the \"kubernetes.io/kubelet-serving\" signerName).\n\nThis API can be used to request client certificates to authenticate to kube-apiserver (with the \"kubernetes.io/kube-apiserver-client\" signerName), or to obtain certificates from custom non-Kubernetes signers.".to_owned()),
178 ..Default::default()
179 })),
180 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Object))),
181 object: Some(Box::new(crate::schemars::schema::ObjectValidation {
182 properties: [
183 (
184 "apiVersion".to_owned(),
185 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
186 metadata: Some(Box::new(crate::schemars::schema::Metadata {
187 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()),
188 ..Default::default()
189 })),
190 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
191 ..Default::default()
192 }),
193 ),
194 (
195 "kind".to_owned(),
196 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
197 metadata: Some(Box::new(crate::schemars::schema::Metadata {
198 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()),
199 ..Default::default()
200 })),
201 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
202 ..Default::default()
203 }),
204 ),
205 (
206 "metadata".to_owned(),
207 __gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::ObjectMeta>(),
208 ),
209 (
210 "spec".to_owned(),
211 {
212 let mut schema_obj = __gen.subschema_for::<crate::api::certificates::v1::CertificateSigningRequestSpec>().into_object();
213 schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
214 description: Some("spec contains the certificate request, and is immutable after creation. Only the request, signerName, expirationSeconds, and usages fields can be set on creation. Other fields are derived by Kubernetes and cannot be modified by users.".to_owned()),
215 ..Default::default()
216 }));
217 crate::schemars::schema::Schema::Object(schema_obj)
218 },
219 ),
220 (
221 "status".to_owned(),
222 {
223 let mut schema_obj = __gen.subschema_for::<crate::api::certificates::v1::CertificateSigningRequestStatus>().into_object();
224 schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
225 description: Some("status contains information about whether the request is approved or denied, and the certificate issued by the signer, or the failure condition indicating signer failure.".to_owned()),
226 ..Default::default()
227 }));
228 crate::schemars::schema::Schema::Object(schema_obj)
229 },
230 ),
231 ].into(),
232 required: [
233 "metadata".to_owned(),
234 "spec".to_owned(),
235 ].into(),
236 ..Default::default()
237 })),
238 ..Default::default()
239 })
240 }
241}