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 core::fmt::Formatter<'_>) -> core::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 core::fmt::Formatter<'_>) -> core::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: std::string::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: std::string::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() -> std::borrow::Cow<'static, str> {
162 "io.k8s.api.authorization.v1.SelfSubjectRulesReview".into()
163 }
164
165 fn json_schema(__gen: &mut crate::schemars::SchemaGenerator) -> crate::schemars::Schema {
166 crate::schemars::json_schema!({
167 "description": "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.",
168 "type": "object",
169 "properties": {
170 "apiVersion": {
171 "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",
172 "type": "string",
173 },
174 "kind": {
175 "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",
176 "type": "string",
177 },
178 "metadata": ({
179 let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::ObjectMeta>();
180 schema_obj.ensure_object().insert("description".into(), "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata".into());
181 schema_obj
182 }),
183 "spec": ({
184 let mut schema_obj = __gen.subschema_for::<crate::api::authorization::v1::SelfSubjectRulesReviewSpec>();
185 schema_obj.ensure_object().insert("description".into(), "Spec holds information about the request being evaluated.".into());
186 schema_obj
187 }),
188 "status": ({
189 let mut schema_obj = __gen.subschema_for::<crate::api::authorization::v1::SubjectRulesReviewStatus>();
190 schema_obj.ensure_object().insert("description".into(), "Status is filled in by the server and indicates the set of actions a user can perform.".into());
191 schema_obj
192 }),
193 },
194 "required": [
195 "metadata",
196 "spec",
197 ],
198 })
199 }
200}