1// Generated from definition io.k8s.api.rbac.v1.PolicyRule
23/// PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.
4#[derive(Clone, Debug, Default, PartialEq)]
5pub struct PolicyRule {
6/// APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed. "" represents the core API group and "*" represents all API groups.
7pub api_groups: Option<std::vec::Vec<std::string::String>>,
89/// NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as "pods" or "secrets") or non-resource URL paths (such as "/api"), but not both.
10pub non_resource_urls: Option<std::vec::Vec<std::string::String>>,
1112/// ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.
13pub resource_names: Option<std::vec::Vec<std::string::String>>,
1415/// Resources is a list of resources this rule applies to. '*' represents all resources.
16pub resources: Option<std::vec::Vec<std::string::String>>,
1718/// Verbs is a list of Verbs that apply to ALL the ResourceKinds contained in this rule. '*' represents all verbs.
19pub verbs: std::vec::Vec<std::string::String>,
20}
2122impl crate::DeepMerge for PolicyRule {
23fn merge_from(&mut self, other: Self) {
24crate::merge_strategies::list::atomic(&mut self.api_groups, other.api_groups);
25crate::merge_strategies::list::atomic(&mut self.non_resource_urls, other.non_resource_urls);
26crate::merge_strategies::list::atomic(&mut self.resource_names, other.resource_names);
27crate::merge_strategies::list::atomic(&mut self.resources, other.resources);
28crate::merge_strategies::list::atomic(&mut self.verbs, other.verbs);
29 }
30}
3132impl<'de> crate::serde::Deserialize<'de> for PolicyRule {
33fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
34#[allow(non_camel_case_types)]
35enum Field {
36 Key_api_groups,
37 Key_non_resource_urls,
38 Key_resource_names,
39 Key_resources,
40 Key_verbs,
41 Other,
42 }
4344impl<'de> crate::serde::Deserialize<'de> for Field {
45fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
46struct Visitor;
4748impl crate::serde::de::Visitor<'_> for Visitor {
49type Value = Field;
5051fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
52 f.write_str("field identifier")
53 }
5455fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
56Ok(match v {
57"apiGroups" => Field::Key_api_groups,
58"nonResourceURLs" => Field::Key_non_resource_urls,
59"resourceNames" => Field::Key_resource_names,
60"resources" => Field::Key_resources,
61"verbs" => Field::Key_verbs,
62_ => Field::Other,
63 })
64 }
65 }
6667 deserializer.deserialize_identifier(Visitor)
68 }
69 }
7071struct Visitor;
7273impl<'de> crate::serde::de::Visitor<'de> for Visitor {
74type Value = PolicyRule;
7576fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
77 f.write_str("PolicyRule")
78 }
7980fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
81let mut value_api_groups: Option<std::vec::Vec<std::string::String>> = None;
82let mut value_non_resource_urls: Option<std::vec::Vec<std::string::String>> = None;
83let mut value_resource_names: Option<std::vec::Vec<std::string::String>> = None;
84let mut value_resources: Option<std::vec::Vec<std::string::String>> = None;
85let mut value_verbs: Option<std::vec::Vec<std::string::String>> = None;
8687while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
88match key {
89 Field::Key_api_groups => value_api_groups = crate::serde::de::MapAccess::next_value(&mut map)?,
90 Field::Key_non_resource_urls => value_non_resource_urls = crate::serde::de::MapAccess::next_value(&mut map)?,
91 Field::Key_resource_names => value_resource_names = crate::serde::de::MapAccess::next_value(&mut map)?,
92 Field::Key_resources => value_resources = crate::serde::de::MapAccess::next_value(&mut map)?,
93 Field::Key_verbs => value_verbs = crate::serde::de::MapAccess::next_value(&mut map)?,
94 Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
95 }
96 }
9798Ok(PolicyRule {
99 api_groups: value_api_groups,
100 non_resource_urls: value_non_resource_urls,
101 resource_names: value_resource_names,
102 resources: value_resources,
103 verbs: value_verbs.unwrap_or_default(),
104 })
105 }
106 }
107108 deserializer.deserialize_struct(
109"PolicyRule",
110&[
111"apiGroups",
112"nonResourceURLs",
113"resourceNames",
114"resources",
115"verbs",
116 ],
117 Visitor,
118 )
119 }
120}
121122impl crate::serde::Serialize for PolicyRule {
123fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
124let mut state = serializer.serialize_struct(
125"PolicyRule",
1261 +
127self.api_groups.as_ref().map_or(0, |_| 1) +
128self.non_resource_urls.as_ref().map_or(0, |_| 1) +
129self.resource_names.as_ref().map_or(0, |_| 1) +
130self.resources.as_ref().map_or(0, |_| 1),
131 )?;
132if let Some(value) = &self.api_groups {
133crate::serde::ser::SerializeStruct::serialize_field(&mut state, "apiGroups", value)?;
134 }
135if let Some(value) = &self.non_resource_urls {
136crate::serde::ser::SerializeStruct::serialize_field(&mut state, "nonResourceURLs", value)?;
137 }
138if let Some(value) = &self.resource_names {
139crate::serde::ser::SerializeStruct::serialize_field(&mut state, "resourceNames", value)?;
140 }
141if let Some(value) = &self.resources {
142crate::serde::ser::SerializeStruct::serialize_field(&mut state, "resources", value)?;
143 }
144crate::serde::ser::SerializeStruct::serialize_field(&mut state, "verbs", &self.verbs)?;
145crate::serde::ser::SerializeStruct::end(state)
146 }
147}
148149#[cfg(feature = "schemars")]
150impl crate::schemars::JsonSchema for PolicyRule {
151fn schema_name() -> std::string::String {
152"io.k8s.api.rbac.v1.PolicyRule".into()
153 }
154155fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
156crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
157 metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
158 description: Some("PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.".into()),
159 ..Default::default()
160 })),
161 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::Object))),
162 object: Some(std::boxed::Box::new(crate::schemars::schema::ObjectValidation {
163 properties: [
164 (
165"apiGroups".into(),
166crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
167 metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
168 description: Some("APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed. \"\" represents the core API group and \"*\" represents all API groups.".into()),
169 ..Default::default()
170 })),
171 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::Array))),
172 array: Some(std::boxed::Box::new(crate::schemars::schema::ArrayValidation {
173 items: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(
174crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
175 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::String))),
176 ..Default::default()
177 })
178 ))),
179 ..Default::default()
180 })),
181 ..Default::default()
182 }),
183 ),
184 (
185"nonResourceURLs".into(),
186crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
187 metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
188 description: Some("NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"), but not both.".into()),
189 ..Default::default()
190 })),
191 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::Array))),
192 array: Some(std::boxed::Box::new(crate::schemars::schema::ArrayValidation {
193 items: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(
194crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
195 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::String))),
196 ..Default::default()
197 })
198 ))),
199 ..Default::default()
200 })),
201 ..Default::default()
202 }),
203 ),
204 (
205"resourceNames".into(),
206crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
207 metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
208 description: Some("ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.".into()),
209 ..Default::default()
210 })),
211 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::Array))),
212 array: Some(std::boxed::Box::new(crate::schemars::schema::ArrayValidation {
213 items: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(
214crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
215 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::String))),
216 ..Default::default()
217 })
218 ))),
219 ..Default::default()
220 })),
221 ..Default::default()
222 }),
223 ),
224 (
225"resources".into(),
226crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
227 metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
228 description: Some("Resources is a list of resources this rule applies to. '*' represents all resources.".into()),
229 ..Default::default()
230 })),
231 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::Array))),
232 array: Some(std::boxed::Box::new(crate::schemars::schema::ArrayValidation {
233 items: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(
234crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
235 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::String))),
236 ..Default::default()
237 })
238 ))),
239 ..Default::default()
240 })),
241 ..Default::default()
242 }),
243 ),
244 (
245"verbs".into(),
246crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
247 metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
248 description: Some("Verbs is a list of Verbs that apply to ALL the ResourceKinds contained in this rule. '*' represents all verbs.".into()),
249 ..Default::default()
250 })),
251 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::Array))),
252 array: Some(std::boxed::Box::new(crate::schemars::schema::ArrayValidation {
253 items: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(
254crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
255 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::String))),
256 ..Default::default()
257 })
258 ))),
259 ..Default::default()
260 })),
261 ..Default::default()
262 }),
263 ),
264 ].into(),
265 required: [
266"verbs".into(),
267 ].into(),
268 ..Default::default()
269 })),
270 ..Default::default()
271 })
272 }
273}