k8s_openapi/v1_32/api/coordination/v1/
lease_spec.rs

1// Generated from definition io.k8s.api.coordination.v1.LeaseSpec
2
3/// LeaseSpec is a specification of a Lease.
4#[derive(Clone, Debug, Default, PartialEq)]
5pub struct LeaseSpec {
6    /// acquireTime is a time when the current lease was acquired.
7    pub acquire_time: Option<crate::apimachinery::pkg::apis::meta::v1::MicroTime>,
8
9    /// holderIdentity contains the identity of the holder of a current lease. If Coordinated Leader Election is used, the holder identity must be equal to the elected LeaseCandidate.metadata.name field.
10    pub holder_identity: Option<String>,
11
12    /// leaseDurationSeconds is a duration that candidates for a lease need to wait to force acquire it. This is measured against the time of last observed renewTime.
13    pub lease_duration_seconds: Option<i32>,
14
15    /// leaseTransitions is the number of transitions of a lease between holders.
16    pub lease_transitions: Option<i32>,
17
18    /// PreferredHolder signals to a lease holder that the lease has a more optimal holder and should be given up. This field can only be set if Strategy is also set.
19    pub preferred_holder: Option<String>,
20
21    /// renewTime is a time when the current holder of a lease has last updated the lease.
22    pub renew_time: Option<crate::apimachinery::pkg::apis::meta::v1::MicroTime>,
23
24    /// Strategy indicates the strategy for picking the leader for coordinated leader election. If the field is not specified, there is no active coordination for this lease. (Alpha) Using this field requires the CoordinatedLeaderElection feature gate to be enabled.
25    pub strategy: Option<String>,
26}
27
28impl crate::DeepMerge for LeaseSpec {
29    fn merge_from(&mut self, other: Self) {
30        crate::DeepMerge::merge_from(&mut self.acquire_time, other.acquire_time);
31        crate::DeepMerge::merge_from(&mut self.holder_identity, other.holder_identity);
32        crate::DeepMerge::merge_from(&mut self.lease_duration_seconds, other.lease_duration_seconds);
33        crate::DeepMerge::merge_from(&mut self.lease_transitions, other.lease_transitions);
34        crate::DeepMerge::merge_from(&mut self.preferred_holder, other.preferred_holder);
35        crate::DeepMerge::merge_from(&mut self.renew_time, other.renew_time);
36        crate::DeepMerge::merge_from(&mut self.strategy, other.strategy);
37    }
38}
39
40impl<'de> crate::serde::Deserialize<'de> for LeaseSpec {
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_acquire_time,
45            Key_holder_identity,
46            Key_lease_duration_seconds,
47            Key_lease_transitions,
48            Key_preferred_holder,
49            Key_renew_time,
50            Key_strategy,
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                            "acquireTime" => Field::Key_acquire_time,
68                            "holderIdentity" => Field::Key_holder_identity,
69                            "leaseDurationSeconds" => Field::Key_lease_duration_seconds,
70                            "leaseTransitions" => Field::Key_lease_transitions,
71                            "preferredHolder" => Field::Key_preferred_holder,
72                            "renewTime" => Field::Key_renew_time,
73                            "strategy" => Field::Key_strategy,
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 = LeaseSpec;
87
88            fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
89                f.write_str("LeaseSpec")
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_acquire_time: Option<crate::apimachinery::pkg::apis::meta::v1::MicroTime> = None;
94                let mut value_holder_identity: Option<String> = None;
95                let mut value_lease_duration_seconds: Option<i32> = None;
96                let mut value_lease_transitions: Option<i32> = None;
97                let mut value_preferred_holder: Option<String> = None;
98                let mut value_renew_time: Option<crate::apimachinery::pkg::apis::meta::v1::MicroTime> = None;
99                let mut value_strategy: Option<String> = None;
100
101                while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
102                    match key {
103                        Field::Key_acquire_time => value_acquire_time = crate::serde::de::MapAccess::next_value(&mut map)?,
104                        Field::Key_holder_identity => value_holder_identity = crate::serde::de::MapAccess::next_value(&mut map)?,
105                        Field::Key_lease_duration_seconds => value_lease_duration_seconds = crate::serde::de::MapAccess::next_value(&mut map)?,
106                        Field::Key_lease_transitions => value_lease_transitions = crate::serde::de::MapAccess::next_value(&mut map)?,
107                        Field::Key_preferred_holder => value_preferred_holder = crate::serde::de::MapAccess::next_value(&mut map)?,
108                        Field::Key_renew_time => value_renew_time = crate::serde::de::MapAccess::next_value(&mut map)?,
109                        Field::Key_strategy => value_strategy = 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(LeaseSpec {
115                    acquire_time: value_acquire_time,
116                    holder_identity: value_holder_identity,
117                    lease_duration_seconds: value_lease_duration_seconds,
118                    lease_transitions: value_lease_transitions,
119                    preferred_holder: value_preferred_holder,
120                    renew_time: value_renew_time,
121                    strategy: value_strategy,
122                })
123            }
124        }
125
126        deserializer.deserialize_struct(
127            "LeaseSpec",
128            &[
129                "acquireTime",
130                "holderIdentity",
131                "leaseDurationSeconds",
132                "leaseTransitions",
133                "preferredHolder",
134                "renewTime",
135                "strategy",
136            ],
137            Visitor,
138        )
139    }
140}
141
142impl crate::serde::Serialize for LeaseSpec {
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            "LeaseSpec",
146            self.acquire_time.as_ref().map_or(0, |_| 1) +
147            self.holder_identity.as_ref().map_or(0, |_| 1) +
148            self.lease_duration_seconds.as_ref().map_or(0, |_| 1) +
149            self.lease_transitions.as_ref().map_or(0, |_| 1) +
150            self.preferred_holder.as_ref().map_or(0, |_| 1) +
151            self.renew_time.as_ref().map_or(0, |_| 1) +
152            self.strategy.as_ref().map_or(0, |_| 1),
153        )?;
154        if let Some(value) = &self.acquire_time {
155            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "acquireTime", value)?;
156        }
157        if let Some(value) = &self.holder_identity {
158            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "holderIdentity", value)?;
159        }
160        if let Some(value) = &self.lease_duration_seconds {
161            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "leaseDurationSeconds", value)?;
162        }
163        if let Some(value) = &self.lease_transitions {
164            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "leaseTransitions", value)?;
165        }
166        if let Some(value) = &self.preferred_holder {
167            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "preferredHolder", value)?;
168        }
169        if let Some(value) = &self.renew_time {
170            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "renewTime", value)?;
171        }
172        if let Some(value) = &self.strategy {
173            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "strategy", value)?;
174        }
175        crate::serde::ser::SerializeStruct::end(state)
176    }
177}
178
179#[cfg(feature = "schemars")]
180impl crate::schemars::JsonSchema for LeaseSpec {
181    fn schema_name() -> String {
182        "io.k8s.api.coordination.v1.LeaseSpec".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("LeaseSpec is a specification of a Lease.".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                        "acquireTime".to_owned(),
196                        {
197                            let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::MicroTime>().into_object();
198                            schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
199                                description: Some("acquireTime is a time when the current lease was acquired.".to_owned()),
200                                ..Default::default()
201                            }));
202                            crate::schemars::schema::Schema::Object(schema_obj)
203                        },
204                    ),
205                    (
206                        "holderIdentity".to_owned(),
207                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
208                            metadata: Some(Box::new(crate::schemars::schema::Metadata {
209                                description: Some("holderIdentity contains the identity of the holder of a current lease. If Coordinated Leader Election is used, the holder identity must be equal to the elected LeaseCandidate.metadata.name field.".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                        "leaseDurationSeconds".to_owned(),
218                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
219                            metadata: Some(Box::new(crate::schemars::schema::Metadata {
220                                description: Some("leaseDurationSeconds is a duration that candidates for a lease need to wait to force acquire it. This is measured against the time of last observed renewTime.".to_owned()),
221                                ..Default::default()
222                            })),
223                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Integer))),
224                            format: Some("int32".to_owned()),
225                            ..Default::default()
226                        }),
227                    ),
228                    (
229                        "leaseTransitions".to_owned(),
230                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
231                            metadata: Some(Box::new(crate::schemars::schema::Metadata {
232                                description: Some("leaseTransitions is the number of transitions of a lease between holders.".to_owned()),
233                                ..Default::default()
234                            })),
235                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Integer))),
236                            format: Some("int32".to_owned()),
237                            ..Default::default()
238                        }),
239                    ),
240                    (
241                        "preferredHolder".to_owned(),
242                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
243                            metadata: Some(Box::new(crate::schemars::schema::Metadata {
244                                description: Some("PreferredHolder signals to a lease holder that the lease has a more optimal holder and should be given up. This field can only be set if Strategy is also set.".to_owned()),
245                                ..Default::default()
246                            })),
247                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
248                            ..Default::default()
249                        }),
250                    ),
251                    (
252                        "renewTime".to_owned(),
253                        {
254                            let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::MicroTime>().into_object();
255                            schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
256                                description: Some("renewTime is a time when the current holder of a lease has last updated the lease.".to_owned()),
257                                ..Default::default()
258                            }));
259                            crate::schemars::schema::Schema::Object(schema_obj)
260                        },
261                    ),
262                    (
263                        "strategy".to_owned(),
264                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
265                            metadata: Some(Box::new(crate::schemars::schema::Metadata {
266                                description: Some("Strategy indicates the strategy for picking the leader for coordinated leader election. If the field is not specified, there is no active coordination for this lease. (Alpha) Using this field requires the CoordinatedLeaderElection feature gate to be enabled.".to_owned()),
267                                ..Default::default()
268                            })),
269                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
270                            ..Default::default()
271                        }),
272                    ),
273                ].into(),
274                ..Default::default()
275            })),
276            ..Default::default()
277        })
278    }
279}