k8s_openapi/v1_30/api/authorization/v1/
self_subject_rules_review.rs1#[derive(Clone, Debug, Default, PartialEq)]
5pub struct SelfSubjectRulesReview {
6 pub metadata: crate::apimachinery::pkg::apis::meta::v1::ObjectMeta,
8
9 pub spec: crate::api::authorization::v1::SelfSubjectRulesReviewSpec,
11
12 pub status: Option<crate::api::authorization::v1::SubjectRulesReviewStatus>,
14}
15
16impl crate::Resource for SelfSubjectRulesReview {
17 const API_VERSION: &'static str = "authorization.k8s.io/v1";
18 const GROUP: &'static str = "authorization.k8s.io";
19 const KIND: &'static str = "SelfSubjectRulesReview";
20 const VERSION: &'static str = "v1";
21 const URL_PATH_SEGMENT: &'static str = "selfsubjectrulesreviews";
22 type Scope = crate::ClusterResourceScope;
23}
24
25impl crate::Metadata for SelfSubjectRulesReview {
26 type Ty = crate::apimachinery::pkg::apis::meta::v1::ObjectMeta;
27
28 fn metadata(&self) -> &<Self as crate::Metadata>::Ty {
29 &self.metadata
30 }
31
32 fn metadata_mut(&mut self) -> &mut<Self as crate::Metadata>::Ty {
33 &mut self.metadata
34 }
35}
36
37impl crate::DeepMerge for SelfSubjectRulesReview {
38 fn merge_from(&mut self, other: Self) {
39 crate::DeepMerge::merge_from(&mut self.metadata, other.metadata);
40 crate::DeepMerge::merge_from(&mut self.spec, other.spec);
41 crate::DeepMerge::merge_from(&mut self.status, other.status);
42 }
43}
44
45impl<'de> crate::serde::Deserialize<'de> for SelfSubjectRulesReview {
46 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
47 #[allow(non_camel_case_types)]
48 enum Field {
49 Key_api_version,
50 Key_kind,
51 Key_metadata,
52 Key_spec,
53 Key_status,
54 Other,
55 }
56
57 impl<'de> crate::serde::Deserialize<'de> for Field {
58 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
59 struct Visitor;
60
61 impl crate::serde::de::Visitor<'_> for Visitor {
62 type Value = Field;
63
64 fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
65 f.write_str("field identifier")
66 }
67
68 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
69 Ok(match v {
70 "apiVersion" => Field::Key_api_version,
71 "kind" => Field::Key_kind,
72 "metadata" => Field::Key_metadata,
73 "spec" => Field::Key_spec,
74 "status" => Field::Key_status,
75 _ => Field::Other,
76 })
77 }
78 }
79
80 deserializer.deserialize_identifier(Visitor)
81 }
82 }
83
84 struct Visitor;
85
86 impl<'de> crate::serde::de::Visitor<'de> for Visitor {
87 type Value = SelfSubjectRulesReview;
88
89 fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
90 f.write_str(<Self::Value as crate::Resource>::KIND)
91 }
92
93 fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
94 let mut value_metadata: Option<crate::apimachinery::pkg::apis::meta::v1::ObjectMeta> = None;
95 let mut value_spec: Option<crate::api::authorization::v1::SelfSubjectRulesReviewSpec> = None;
96 let mut value_status: Option<crate::api::authorization::v1::SubjectRulesReviewStatus> = None;
97
98 while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
99 match key {
100 Field::Key_api_version => {
101 let value_api_version: String = crate::serde::de::MapAccess::next_value(&mut map)?;
102 if value_api_version != <Self::Value as crate::Resource>::API_VERSION {
103 return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_api_version), &<Self::Value as crate::Resource>::API_VERSION));
104 }
105 },
106 Field::Key_kind => {
107 let value_kind: String = crate::serde::de::MapAccess::next_value(&mut map)?;
108 if value_kind != <Self::Value as crate::Resource>::KIND {
109 return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_kind), &<Self::Value as crate::Resource>::KIND));
110 }
111 },
112 Field::Key_metadata => value_metadata = crate::serde::de::MapAccess::next_value(&mut map)?,
113 Field::Key_spec => value_spec = crate::serde::de::MapAccess::next_value(&mut map)?,
114 Field::Key_status => value_status = 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(SelfSubjectRulesReview {
120 metadata: value_metadata.unwrap_or_default(),
121 spec: value_spec.unwrap_or_default(),
122 status: value_status,
123 })
124 }
125 }
126
127 deserializer.deserialize_struct(
128 <Self as crate::Resource>::KIND,
129 &[
130 "apiVersion",
131 "kind",
132 "metadata",
133 "spec",
134 "status",
135 ],
136 Visitor,
137 )
138 }
139}
140
141impl crate::serde::Serialize for SelfSubjectRulesReview {
142 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
143 let mut state = serializer.serialize_struct(
144 <Self as crate::Resource>::KIND,
145 4 +
146 self.status.as_ref().map_or(0, |_| 1),
147 )?;
148 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "apiVersion", <Self as crate::Resource>::API_VERSION)?;
149 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "kind", <Self as crate::Resource>::KIND)?;
150 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "metadata", &self.metadata)?;
151 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "spec", &self.spec)?;
152 if let Some(value) = &self.status {
153 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "status", value)?;
154 }
155 crate::serde::ser::SerializeStruct::end(state)
156 }
157}
158
159#[cfg(feature = "schemars")]
160impl crate::schemars::JsonSchema for SelfSubjectRulesReview {
161 fn schema_name() -> String {
162 "io.k8s.api.authorization.v1.SelfSubjectRulesReview".to_owned()
163 }
164
165 fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
166 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
167 metadata: Some(Box::new(crate::schemars::schema::Metadata {
168 description: Some("SelfSubjectRulesReview enumerates the set of actions the current user can perform within a namespace. The returned list of actions may be incomplete depending on the server's authorization mode, and any errors experienced during the evaluation. SelfSubjectRulesReview should be used by UIs to show/hide actions, or to quickly let an end user reason about their permissions. It should NOT Be used by external systems to drive authorization decisions as this raises confused deputy, cache lifetime/revocation, and correctness concerns. SubjectAccessReview, and LocalAccessReview are the correct way to defer authorization decisions to the API server.".to_owned()),
169 ..Default::default()
170 })),
171 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Object))),
172 object: Some(Box::new(crate::schemars::schema::ObjectValidation {
173 properties: [
174 (
175 "apiVersion".to_owned(),
176 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
177 metadata: Some(Box::new(crate::schemars::schema::Metadata {
178 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()),
179 ..Default::default()
180 })),
181 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
182 ..Default::default()
183 }),
184 ),
185 (
186 "kind".to_owned(),
187 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
188 metadata: Some(Box::new(crate::schemars::schema::Metadata {
189 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()),
190 ..Default::default()
191 })),
192 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
193 ..Default::default()
194 }),
195 ),
196 (
197 "metadata".to_owned(),
198 {
199 let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::ObjectMeta>().into_object();
200 schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
201 description: Some("Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata".to_owned()),
202 ..Default::default()
203 }));
204 crate::schemars::schema::Schema::Object(schema_obj)
205 },
206 ),
207 (
208 "spec".to_owned(),
209 {
210 let mut schema_obj = __gen.subschema_for::<crate::api::authorization::v1::SelfSubjectRulesReviewSpec>().into_object();
211 schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
212 description: Some("Spec holds information about the request being evaluated.".to_owned()),
213 ..Default::default()
214 }));
215 crate::schemars::schema::Schema::Object(schema_obj)
216 },
217 ),
218 (
219 "status".to_owned(),
220 {
221 let mut schema_obj = __gen.subschema_for::<crate::api::authorization::v1::SubjectRulesReviewStatus>().into_object();
222 schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
223 description: Some("Status is filled in by the server and indicates the set of actions a user can perform.".to_owned()),
224 ..Default::default()
225 }));
226 crate::schemars::schema::Schema::Object(schema_obj)
227 },
228 ),
229 ].into(),
230 required: [
231 "metadata".to_owned(),
232 "spec".to_owned(),
233 ].into(),
234 ..Default::default()
235 })),
236 ..Default::default()
237 })
238 }
239}