k8s_openapi/v1_30/api/authorization/v1/
resource_attributes.rs1#[derive(Clone, Debug, Default, PartialEq)]
5pub struct ResourceAttributes {
6 pub group: Option<String>,
8
9 pub name: Option<String>,
11
12 pub namespace: Option<String>,
14
15 pub resource: Option<String>,
17
18 pub subresource: Option<String>,
20
21 pub verb: Option<String>,
23
24 pub version: Option<String>,
26}
27
28impl crate::DeepMerge for ResourceAttributes {
29 fn merge_from(&mut self, other: Self) {
30 crate::DeepMerge::merge_from(&mut self.group, other.group);
31 crate::DeepMerge::merge_from(&mut self.name, other.name);
32 crate::DeepMerge::merge_from(&mut self.namespace, other.namespace);
33 crate::DeepMerge::merge_from(&mut self.resource, other.resource);
34 crate::DeepMerge::merge_from(&mut self.subresource, other.subresource);
35 crate::DeepMerge::merge_from(&mut self.verb, other.verb);
36 crate::DeepMerge::merge_from(&mut self.version, other.version);
37 }
38}
39
40impl<'de> crate::serde::Deserialize<'de> for ResourceAttributes {
41 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
42 #[allow(non_camel_case_types)]
43 enum Field {
44 Key_group,
45 Key_name,
46 Key_namespace,
47 Key_resource,
48 Key_subresource,
49 Key_verb,
50 Key_version,
51 Other,
52 }
53
54 impl<'de> crate::serde::Deserialize<'de> for Field {
55 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
56 struct Visitor;
57
58 impl crate::serde::de::Visitor<'_> for Visitor {
59 type Value = Field;
60
61 fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
62 f.write_str("field identifier")
63 }
64
65 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
66 Ok(match v {
67 "group" => Field::Key_group,
68 "name" => Field::Key_name,
69 "namespace" => Field::Key_namespace,
70 "resource" => Field::Key_resource,
71 "subresource" => Field::Key_subresource,
72 "verb" => Field::Key_verb,
73 "version" => Field::Key_version,
74 _ => Field::Other,
75 })
76 }
77 }
78
79 deserializer.deserialize_identifier(Visitor)
80 }
81 }
82
83 struct Visitor;
84
85 impl<'de> crate::serde::de::Visitor<'de> for Visitor {
86 type Value = ResourceAttributes;
87
88 fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
89 f.write_str("ResourceAttributes")
90 }
91
92 fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
93 let mut value_group: Option<String> = None;
94 let mut value_name: Option<String> = None;
95 let mut value_namespace: Option<String> = None;
96 let mut value_resource: Option<String> = None;
97 let mut value_subresource: Option<String> = None;
98 let mut value_verb: Option<String> = None;
99 let mut value_version: Option<String> = None;
100
101 while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
102 match key {
103 Field::Key_group => value_group = crate::serde::de::MapAccess::next_value(&mut map)?,
104 Field::Key_name => value_name = crate::serde::de::MapAccess::next_value(&mut map)?,
105 Field::Key_namespace => value_namespace = crate::serde::de::MapAccess::next_value(&mut map)?,
106 Field::Key_resource => value_resource = crate::serde::de::MapAccess::next_value(&mut map)?,
107 Field::Key_subresource => value_subresource = crate::serde::de::MapAccess::next_value(&mut map)?,
108 Field::Key_verb => value_verb = crate::serde::de::MapAccess::next_value(&mut map)?,
109 Field::Key_version => value_version = crate::serde::de::MapAccess::next_value(&mut map)?,
110 Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
111 }
112 }
113
114 Ok(ResourceAttributes {
115 group: value_group,
116 name: value_name,
117 namespace: value_namespace,
118 resource: value_resource,
119 subresource: value_subresource,
120 verb: value_verb,
121 version: value_version,
122 })
123 }
124 }
125
126 deserializer.deserialize_struct(
127 "ResourceAttributes",
128 &[
129 "group",
130 "name",
131 "namespace",
132 "resource",
133 "subresource",
134 "verb",
135 "version",
136 ],
137 Visitor,
138 )
139 }
140}
141
142impl crate::serde::Serialize for ResourceAttributes {
143 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
144 let mut state = serializer.serialize_struct(
145 "ResourceAttributes",
146 self.group.as_ref().map_or(0, |_| 1) +
147 self.name.as_ref().map_or(0, |_| 1) +
148 self.namespace.as_ref().map_or(0, |_| 1) +
149 self.resource.as_ref().map_or(0, |_| 1) +
150 self.subresource.as_ref().map_or(0, |_| 1) +
151 self.verb.as_ref().map_or(0, |_| 1) +
152 self.version.as_ref().map_or(0, |_| 1),
153 )?;
154 if let Some(value) = &self.group {
155 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "group", value)?;
156 }
157 if let Some(value) = &self.name {
158 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "name", value)?;
159 }
160 if let Some(value) = &self.namespace {
161 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "namespace", value)?;
162 }
163 if let Some(value) = &self.resource {
164 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "resource", value)?;
165 }
166 if let Some(value) = &self.subresource {
167 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "subresource", value)?;
168 }
169 if let Some(value) = &self.verb {
170 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "verb", value)?;
171 }
172 if let Some(value) = &self.version {
173 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "version", value)?;
174 }
175 crate::serde::ser::SerializeStruct::end(state)
176 }
177}
178
179#[cfg(feature = "schemars")]
180impl crate::schemars::JsonSchema for ResourceAttributes {
181 fn schema_name() -> String {
182 "io.k8s.api.authorization.v1.ResourceAttributes".to_owned()
183 }
184
185 fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
186 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
187 metadata: Some(Box::new(crate::schemars::schema::Metadata {
188 description: Some("ResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface".to_owned()),
189 ..Default::default()
190 })),
191 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Object))),
192 object: Some(Box::new(crate::schemars::schema::ObjectValidation {
193 properties: [
194 (
195 "group".to_owned(),
196 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
197 metadata: Some(Box::new(crate::schemars::schema::Metadata {
198 description: Some("Group is the API Group of the Resource. \"*\" means all.".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 "name".to_owned(),
207 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
208 metadata: Some(Box::new(crate::schemars::schema::Metadata {
209 description: Some("Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.".to_owned()),
210 ..Default::default()
211 })),
212 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
213 ..Default::default()
214 }),
215 ),
216 (
217 "namespace".to_owned(),
218 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
219 metadata: Some(Box::new(crate::schemars::schema::Metadata {
220 description: Some("Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview".to_owned()),
221 ..Default::default()
222 })),
223 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
224 ..Default::default()
225 }),
226 ),
227 (
228 "resource".to_owned(),
229 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
230 metadata: Some(Box::new(crate::schemars::schema::Metadata {
231 description: Some("Resource is one of the existing resource types. \"*\" means all.".to_owned()),
232 ..Default::default()
233 })),
234 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
235 ..Default::default()
236 }),
237 ),
238 (
239 "subresource".to_owned(),
240 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
241 metadata: Some(Box::new(crate::schemars::schema::Metadata {
242 description: Some("Subresource is one of the existing resource types. \"\" means none.".to_owned()),
243 ..Default::default()
244 })),
245 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
246 ..Default::default()
247 }),
248 ),
249 (
250 "verb".to_owned(),
251 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
252 metadata: Some(Box::new(crate::schemars::schema::Metadata {
253 description: Some("Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. \"*\" means all.".to_owned()),
254 ..Default::default()
255 })),
256 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
257 ..Default::default()
258 }),
259 ),
260 (
261 "version".to_owned(),
262 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
263 metadata: Some(Box::new(crate::schemars::schema::Metadata {
264 description: Some("Version is the API Version of the Resource. \"*\" means all.".to_owned()),
265 ..Default::default()
266 })),
267 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
268 ..Default::default()
269 }),
270 ),
271 ].into(),
272 ..Default::default()
273 })),
274 ..Default::default()
275 })
276 }
277}