k8s_openapi/v1_34/api/coordination/v1/
lease_spec.rs1#[derive(Clone, Debug, Default, PartialEq)]
5pub struct LeaseSpec {
6 pub acquire_time: Option<crate::apimachinery::pkg::apis::meta::v1::MicroTime>,
8
9 pub holder_identity: Option<std::string::String>,
11
12 pub lease_duration_seconds: Option<i32>,
14
15 pub lease_transitions: Option<i32>,
17
18 pub preferred_holder: Option<std::string::String>,
20
21 pub renew_time: Option<crate::apimachinery::pkg::apis::meta::v1::MicroTime>,
23
24 pub strategy: Option<std::string::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 core::fmt::Formatter<'_>) -> core::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 core::fmt::Formatter<'_>) -> core::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<std::string::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<std::string::String> = None;
98 let mut value_renew_time: Option<crate::apimachinery::pkg::apis::meta::v1::MicroTime> = None;
99 let mut value_strategy: Option<std::string::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() -> std::borrow::Cow<'static, str> {
182 "io.k8s.api.coordination.v1.LeaseSpec".into()
183 }
184
185 fn json_schema(__gen: &mut crate::schemars::SchemaGenerator) -> crate::schemars::Schema {
186 crate::schemars::json_schema!({
187 "description": "LeaseSpec is a specification of a Lease.",
188 "type": "object",
189 "properties": {
190 "acquireTime": ({
191 let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::MicroTime>();
192 schema_obj.ensure_object().insert("description".into(), "acquireTime is a time when the current lease was acquired.".into());
193 schema_obj
194 }),
195 "holderIdentity": {
196 "description": "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.",
197 "type": "string",
198 },
199 "leaseDurationSeconds": {
200 "description": "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.",
201 "type": "integer",
202 "format": "int32",
203 },
204 "leaseTransitions": {
205 "description": "leaseTransitions is the number of transitions of a lease between holders.",
206 "type": "integer",
207 "format": "int32",
208 },
209 "preferredHolder": {
210 "description": "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.",
211 "type": "string",
212 },
213 "renewTime": ({
214 let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::MicroTime>();
215 schema_obj.ensure_object().insert("description".into(), "renewTime is a time when the current holder of a lease has last updated the lease.".into());
216 schema_obj
217 }),
218 "strategy": {
219 "description": "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.",
220 "type": "string",
221 },
222 },
223 })
224 }
225}