k8s_openapi/v1_30/apimachinery/pkg/apis/meta/v1/
owner_reference.rs
1#[derive(Clone, Debug, Default, PartialEq)]
5pub struct OwnerReference {
6 pub api_version: String,
8
9 pub block_owner_deletion: Option<bool>,
11
12 pub controller: Option<bool>,
14
15 pub kind: String,
17
18 pub name: String,
20
21 pub uid: String,
23}
24
25impl crate::DeepMerge for OwnerReference {
26 fn merge_from(&mut self, other: Self) {
27 crate::DeepMerge::merge_from(&mut self.api_version, other.api_version);
28 crate::DeepMerge::merge_from(&mut self.block_owner_deletion, other.block_owner_deletion);
29 crate::DeepMerge::merge_from(&mut self.controller, other.controller);
30 crate::DeepMerge::merge_from(&mut self.kind, other.kind);
31 crate::DeepMerge::merge_from(&mut self.name, other.name);
32 crate::DeepMerge::merge_from(&mut self.uid, other.uid);
33 }
34}
35
36impl<'de> crate::serde::Deserialize<'de> for OwnerReference {
37 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
38 #[allow(non_camel_case_types)]
39 enum Field {
40 Key_api_version,
41 Key_block_owner_deletion,
42 Key_controller,
43 Key_kind,
44 Key_name,
45 Key_uid,
46 Other,
47 }
48
49 impl<'de> crate::serde::Deserialize<'de> for Field {
50 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
51 struct Visitor;
52
53 impl<'de> crate::serde::de::Visitor<'de> for Visitor {
54 type Value = Field;
55
56 fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
57 f.write_str("field identifier")
58 }
59
60 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
61 Ok(match v {
62 "apiVersion" => Field::Key_api_version,
63 "blockOwnerDeletion" => Field::Key_block_owner_deletion,
64 "controller" => Field::Key_controller,
65 "kind" => Field::Key_kind,
66 "name" => Field::Key_name,
67 "uid" => Field::Key_uid,
68 _ => Field::Other,
69 })
70 }
71 }
72
73 deserializer.deserialize_identifier(Visitor)
74 }
75 }
76
77 struct Visitor;
78
79 impl<'de> crate::serde::de::Visitor<'de> for Visitor {
80 type Value = OwnerReference;
81
82 fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
83 f.write_str("OwnerReference")
84 }
85
86 fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
87 let mut value_api_version: Option<String> = None;
88 let mut value_block_owner_deletion: Option<bool> = None;
89 let mut value_controller: Option<bool> = None;
90 let mut value_kind: Option<String> = None;
91 let mut value_name: Option<String> = None;
92 let mut value_uid: Option<String> = None;
93
94 while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
95 match key {
96 Field::Key_api_version => value_api_version = crate::serde::de::MapAccess::next_value(&mut map)?,
97 Field::Key_block_owner_deletion => value_block_owner_deletion = crate::serde::de::MapAccess::next_value(&mut map)?,
98 Field::Key_controller => value_controller = crate::serde::de::MapAccess::next_value(&mut map)?,
99 Field::Key_kind => value_kind = crate::serde::de::MapAccess::next_value(&mut map)?,
100 Field::Key_name => value_name = crate::serde::de::MapAccess::next_value(&mut map)?,
101 Field::Key_uid => value_uid = crate::serde::de::MapAccess::next_value(&mut map)?,
102 Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
103 }
104 }
105
106 Ok(OwnerReference {
107 api_version: value_api_version.unwrap_or_default(),
108 block_owner_deletion: value_block_owner_deletion,
109 controller: value_controller,
110 kind: value_kind.unwrap_or_default(),
111 name: value_name.unwrap_or_default(),
112 uid: value_uid.unwrap_or_default(),
113 })
114 }
115 }
116
117 deserializer.deserialize_struct(
118 "OwnerReference",
119 &[
120 "apiVersion",
121 "blockOwnerDeletion",
122 "controller",
123 "kind",
124 "name",
125 "uid",
126 ],
127 Visitor,
128 )
129 }
130}
131
132impl crate::serde::Serialize for OwnerReference {
133 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
134 let mut state = serializer.serialize_struct(
135 "OwnerReference",
136 4 +
137 self.block_owner_deletion.as_ref().map_or(0, |_| 1) +
138 self.controller.as_ref().map_or(0, |_| 1),
139 )?;
140 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "apiVersion", &self.api_version)?;
141 if let Some(value) = &self.block_owner_deletion {
142 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "blockOwnerDeletion", value)?;
143 }
144 if let Some(value) = &self.controller {
145 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "controller", value)?;
146 }
147 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "kind", &self.kind)?;
148 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "name", &self.name)?;
149 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "uid", &self.uid)?;
150 crate::serde::ser::SerializeStruct::end(state)
151 }
152}
153
154#[cfg(feature = "schemars")]
155impl crate::schemars::JsonSchema for OwnerReference {
156 fn schema_name() -> String {
157 "io.k8s.apimachinery.pkg.apis.meta.v1.OwnerReference".to_owned()
158 }
159
160 fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
161 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
162 metadata: Some(Box::new(crate::schemars::schema::Metadata {
163 description: Some("OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.".to_owned()),
164 ..Default::default()
165 })),
166 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Object))),
167 object: Some(Box::new(crate::schemars::schema::ObjectValidation {
168 properties: [
169 (
170 "apiVersion".to_owned(),
171 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
172 metadata: Some(Box::new(crate::schemars::schema::Metadata {
173 description: Some("API version of the referent.".to_owned()),
174 ..Default::default()
175 })),
176 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
177 ..Default::default()
178 }),
179 ),
180 (
181 "blockOwnerDeletion".to_owned(),
182 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
183 metadata: Some(Box::new(crate::schemars::schema::Metadata {
184 description: Some("If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. See https://kubernetes.io/docs/concepts/architecture/garbage-collection/#foreground-deletion for how the garbage collector interacts with this field and enforces the foreground deletion. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.".to_owned()),
185 ..Default::default()
186 })),
187 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Boolean))),
188 ..Default::default()
189 }),
190 ),
191 (
192 "controller".to_owned(),
193 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
194 metadata: Some(Box::new(crate::schemars::schema::Metadata {
195 description: Some("If true, this reference points to the managing controller.".to_owned()),
196 ..Default::default()
197 })),
198 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Boolean))),
199 ..Default::default()
200 }),
201 ),
202 (
203 "kind".to_owned(),
204 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
205 metadata: Some(Box::new(crate::schemars::schema::Metadata {
206 description: Some("Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds".to_owned()),
207 ..Default::default()
208 })),
209 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
210 ..Default::default()
211 }),
212 ),
213 (
214 "name".to_owned(),
215 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
216 metadata: Some(Box::new(crate::schemars::schema::Metadata {
217 description: Some("Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names".to_owned()),
218 ..Default::default()
219 })),
220 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
221 ..Default::default()
222 }),
223 ),
224 (
225 "uid".to_owned(),
226 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
227 metadata: Some(Box::new(crate::schemars::schema::Metadata {
228 description: Some("UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids".to_owned()),
229 ..Default::default()
230 })),
231 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
232 ..Default::default()
233 }),
234 ),
235 ].into(),
236 required: [
237 "apiVersion".to_owned(),
238 "kind".to_owned(),
239 "name".to_owned(),
240 "uid".to_owned(),
241 ].into(),
242 ..Default::default()
243 })),
244 ..Default::default()
245 })
246 }
247}