krabka_protocol/opt/rustwide/workdir/generated/
VotersRecord.owned.rs1use bytes::{Buf, BufMut};
4
5use crate::{
6 Decode, Encode, ProtocolError, UnknownTaggedFields,
7 primitives::{
8 fixed::{get_i16, get_i32, get_u16, put_i16, put_i32, put_u16},
9 string_bytes::{
10 compact_string_len, get_compact_string_owned, get_string_owned, put_compact_string,
11 put_string, string_len,
12 },
13 },
14 tagged_fields::{WriteTaggedFields, read_tagged_fields, tagged_fields_len},
15};
16pub const MIN_VERSION: i16 = 0;
17pub const MAX_VERSION: i16 = 0;
18pub const FLEXIBLE_MIN: i16 = 0;
19#[inline]
20#[must_use]
21pub fn is_flexible(version: i16) -> bool {
22 version >= FLEXIBLE_MIN
23}
24#[derive(Debug, Clone, PartialEq, Eq, Default)]
25pub struct VotersRecord {
26 pub version: i16,
27 pub voters: Vec<Voter>,
28 pub unknown_tagged_fields: UnknownTaggedFields,
29}
30impl Encode for VotersRecord {
31 fn encode<B: BufMut>(&self, buf: &mut B, version: i16) -> Result<(), ProtocolError> {
32 if !(MIN_VERSION..=MAX_VERSION).contains(&version) {
33 return Err(ProtocolError::SchemaMismatch(
34 "VotersRecord version out of range",
35 ));
36 }
37 let flex = is_flexible(version);
38 if version >= 0 {
39 put_i16(buf, self.version);
40 }
41 if version >= 0 {
42 {
43 crate::primitives::array::put_array_len(buf, (self.voters).len(), flex);
44 for it in &self.voters {
45 it.encode(buf, version)?;
46 }
47 };
48 }
49 if flex {
50 let tagged = WriteTaggedFields::new();
51 tagged.write(buf, &self.unknown_tagged_fields);
52 }
53 Ok(())
54 }
55 fn encoded_len(&self, version: i16) -> usize {
56 let flex = is_flexible(version);
57 let mut n: usize = 0;
58 if version >= 0 {
59 n += 2;
60 }
61 if version >= 0 {
62 n += {
63 let prefix =
64 crate::primitives::array::array_len_prefix_len((self.voters).len(), flex);
65 let body: usize = (self.voters).iter().map(|it| it.encoded_len(version)).sum();
66 prefix + body
67 };
68 }
69 if flex {
70 let known_pairs: Vec<(u32, usize)> = Vec::new();
71 n += tagged_fields_len(&known_pairs, &self.unknown_tagged_fields);
72 }
73 n
74 }
75}
76impl Decode<'_> for VotersRecord {
77 fn decode<B: Buf>(buf: &mut B, version: i16) -> Result<Self, ProtocolError> {
78 if !(MIN_VERSION..=MAX_VERSION).contains(&version) {
79 return Err(ProtocolError::SchemaMismatch(
80 "VotersRecord version out of range",
81 ));
82 }
83 let flex = is_flexible(version);
84 let mut out = Self::default();
85 if version >= 0 {
86 out.version = get_i16(buf)?;
87 }
88 if version >= 0 {
89 out.voters = {
90 let n = crate::primitives::array::get_array_len(buf, flex)?;
91 let mut v = Vec::with_capacity(n);
92 for _ in 0..n {
93 v.push(Voter::decode(buf, version)?);
94 }
95 v
96 };
97 }
98 if flex {
99 out.unknown_tagged_fields = read_tagged_fields(buf, |_tag, _payload| Ok(false))?;
100 }
101 Ok(out)
102 }
103}
104#[cfg(test)]
105impl VotersRecord {
106 #[must_use]
107 pub fn populated(version: i16) -> Self {
108 let mut m = Self::default();
109 if version >= 0 {
110 m.version = 1i16;
111 }
112 if version >= 0 {
113 m.voters = vec![Voter::populated(version)];
114 }
115 m
116 }
117}
118#[derive(Debug, Clone, PartialEq, Eq, Default)]
119pub struct Voter {
120 pub voter_id: i32,
121 pub voter_directory_id: crate::primitives::uuid::Uuid,
122 pub endpoints: Vec<Endpoint>,
123 pub k_raft_version_feature: KRaftVersionFeature,
124 pub unknown_tagged_fields: UnknownTaggedFields,
125}
126impl Encode for Voter {
127 fn encode<B: BufMut>(&self, buf: &mut B, version: i16) -> Result<(), ProtocolError> {
128 let flex = version >= 0;
129 if version >= 0 {
130 put_i32(buf, self.voter_id);
131 }
132 if version >= 0 {
133 crate::primitives::uuid::put_uuid(buf, self.voter_directory_id);
134 }
135 if version >= 0 {
136 {
137 crate::primitives::array::put_array_len(buf, (self.endpoints).len(), flex);
138 for it in &self.endpoints {
139 it.encode(buf, version)?;
140 }
141 };
142 }
143 if version >= 0 {
144 self.k_raft_version_feature.encode(buf, version)?;
145 }
146 if flex {
147 let tagged = WriteTaggedFields::new();
148 tagged.write(buf, &self.unknown_tagged_fields);
149 }
150 Ok(())
151 }
152 fn encoded_len(&self, version: i16) -> usize {
153 let flex = version >= 0;
154 let mut n: usize = 0;
155 if version >= 0 {
156 n += 4;
157 }
158 if version >= 0 {
159 n += 16;
160 }
161 if version >= 0 {
162 n += {
163 let prefix =
164 crate::primitives::array::array_len_prefix_len((self.endpoints).len(), flex);
165 let body: usize = (self.endpoints)
166 .iter()
167 .map(|it| it.encoded_len(version))
168 .sum();
169 prefix + body
170 };
171 }
172 if version >= 0 {
173 n += self.k_raft_version_feature.encoded_len(version);
174 }
175 if flex {
176 let known_pairs: Vec<(u32, usize)> = Vec::new();
177 n += tagged_fields_len(&known_pairs, &self.unknown_tagged_fields);
178 }
179 n
180 }
181}
182impl Decode<'_> for Voter {
183 fn decode<B: Buf>(buf: &mut B, version: i16) -> Result<Self, ProtocolError> {
184 let flex = version >= 0;
185 let mut out = Self::default();
186 if version >= 0 {
187 out.voter_id = get_i32(buf)?;
188 }
189 if version >= 0 {
190 out.voter_directory_id = crate::primitives::uuid::get_uuid(buf)?;
191 }
192 if version >= 0 {
193 out.endpoints = {
194 let n = crate::primitives::array::get_array_len(buf, flex)?;
195 let mut v = Vec::with_capacity(n);
196 for _ in 0..n {
197 v.push(Endpoint::decode(buf, version)?);
198 }
199 v
200 };
201 }
202 if version >= 0 {
203 out.k_raft_version_feature = KRaftVersionFeature::decode(buf, version)?;
204 }
205 if flex {
206 out.unknown_tagged_fields = read_tagged_fields(buf, |_tag, _payload| Ok(false))?;
207 }
208 Ok(out)
209 }
210}
211#[cfg(test)]
212impl Voter {
213 #[must_use]
214 pub fn populated(version: i16) -> Self {
215 let mut m = Self::default();
216 if version >= 0 {
217 m.voter_id = 1i32;
218 }
219 if version >= 0 {
220 m.voter_directory_id = crate::primitives::uuid::Uuid([1u8; 16]);
221 }
222 if version >= 0 {
223 m.endpoints = vec![Endpoint::populated(version)];
224 }
225 if version >= 0 {
226 m.k_raft_version_feature = KRaftVersionFeature::populated(version);
227 }
228 m
229 }
230}
231#[derive(Debug, Clone, PartialEq, Eq, Default)]
232pub struct Endpoint {
233 pub name: String,
234 pub host: String,
235 pub port: u16,
236 pub unknown_tagged_fields: UnknownTaggedFields,
237}
238impl Encode for Endpoint {
239 fn encode<B: BufMut>(&self, buf: &mut B, version: i16) -> Result<(), ProtocolError> {
240 let flex = version >= 0;
241 if version >= 0 {
242 if flex {
243 let () = put_compact_string(buf, &self.name);
244 } else {
245 let () = put_string(buf, &self.name);
246 }
247 }
248 if version >= 0 {
249 if flex {
250 let () = put_compact_string(buf, &self.host);
251 } else {
252 let () = put_string(buf, &self.host);
253 }
254 }
255 if version >= 0 {
256 put_u16(buf, self.port);
257 }
258 if flex {
259 let tagged = WriteTaggedFields::new();
260 tagged.write(buf, &self.unknown_tagged_fields);
261 }
262 Ok(())
263 }
264 fn encoded_len(&self, version: i16) -> usize {
265 let flex = version >= 0;
266 let mut n: usize = 0;
267 if version >= 0 {
268 n += if flex {
269 compact_string_len(&self.name)
270 } else {
271 string_len(&self.name)
272 };
273 }
274 if version >= 0 {
275 n += if flex {
276 compact_string_len(&self.host)
277 } else {
278 string_len(&self.host)
279 };
280 }
281 if version >= 0 {
282 n += 2;
283 }
284 if flex {
285 let known_pairs: Vec<(u32, usize)> = Vec::new();
286 n += tagged_fields_len(&known_pairs, &self.unknown_tagged_fields);
287 }
288 n
289 }
290}
291impl Decode<'_> for Endpoint {
292 fn decode<B: Buf>(buf: &mut B, version: i16) -> Result<Self, ProtocolError> {
293 let flex = version >= 0;
294 let mut out = Self::default();
295 if version >= 0 {
296 out.name = if flex {
297 get_compact_string_owned(buf)?
298 } else {
299 get_string_owned(buf)?
300 };
301 }
302 if version >= 0 {
303 out.host = if flex {
304 get_compact_string_owned(buf)?
305 } else {
306 get_string_owned(buf)?
307 };
308 }
309 if version >= 0 {
310 out.port = get_u16(buf)?;
311 }
312 if flex {
313 out.unknown_tagged_fields = read_tagged_fields(buf, |_tag, _payload| Ok(false))?;
314 }
315 Ok(out)
316 }
317}
318#[cfg(test)]
319impl Endpoint {
320 #[must_use]
321 pub fn populated(version: i16) -> Self {
322 let mut m = Self::default();
323 if version >= 0 {
324 m.name = "x".to_string();
325 }
326 if version >= 0 {
327 m.host = "x".to_string();
328 }
329 if version >= 0 {
330 m.port = 1u16;
331 }
332 m
333 }
334}
335#[derive(Debug, Clone, PartialEq, Eq, Default)]
336pub struct KRaftVersionFeature {
337 pub min_supported_version: i16,
338 pub max_supported_version: i16,
339 pub unknown_tagged_fields: UnknownTaggedFields,
340}
341impl Encode for KRaftVersionFeature {
342 fn encode<B: BufMut>(&self, buf: &mut B, version: i16) -> Result<(), ProtocolError> {
343 let flex = version >= 0;
344 if version >= 0 {
345 put_i16(buf, self.min_supported_version);
346 }
347 if version >= 0 {
348 put_i16(buf, self.max_supported_version);
349 }
350 if flex {
351 let tagged = WriteTaggedFields::new();
352 tagged.write(buf, &self.unknown_tagged_fields);
353 }
354 Ok(())
355 }
356 fn encoded_len(&self, version: i16) -> usize {
357 let flex = version >= 0;
358 let mut n: usize = 0;
359 if version >= 0 {
360 n += 2;
361 }
362 if version >= 0 {
363 n += 2;
364 }
365 if flex {
366 let known_pairs: Vec<(u32, usize)> = Vec::new();
367 n += tagged_fields_len(&known_pairs, &self.unknown_tagged_fields);
368 }
369 n
370 }
371}
372impl Decode<'_> for KRaftVersionFeature {
373 fn decode<B: Buf>(buf: &mut B, version: i16) -> Result<Self, ProtocolError> {
374 let flex = version >= 0;
375 let mut out = Self::default();
376 if version >= 0 {
377 out.min_supported_version = get_i16(buf)?;
378 }
379 if version >= 0 {
380 out.max_supported_version = get_i16(buf)?;
381 }
382 if flex {
383 out.unknown_tagged_fields = read_tagged_fields(buf, |_tag, _payload| Ok(false))?;
384 }
385 Ok(out)
386 }
387}
388#[cfg(test)]
389impl KRaftVersionFeature {
390 #[must_use]
391 pub fn populated(version: i16) -> Self {
392 let mut m = Self::default();
393 if version >= 0 {
394 m.min_supported_version = 1i16;
395 }
396 if version >= 0 {
397 m.max_supported_version = 1i16;
398 }
399 m
400 }
401}
402#[must_use]
405#[allow(unused_comparisons)]
406pub fn default_json(_version: i16) -> ::serde_json::Value {
407 let mut obj = ::serde_json::Map::new();
408 obj.insert("version".to_string(), ::serde_json::json!(0));
409 obj.insert("voters".to_string(), ::serde_json::Value::Array(vec![]));
410 ::serde_json::Value::Object(obj)
411}