krabka_protocol/opt/rustwide/workdir/generated/
VoteResponse.borrowed.rs1use bytes::BufMut;
3
4use crate::{
5 Decode, DecodeBorrow, Encode, ProtocolError, UnknownTaggedFields,
6 codegen_helpers::is_default,
7 owned::vote_response,
8 primitives::{
9 array::{array_len_prefix_len, get_array_len, put_array_len},
10 fixed::{get_bool, get_i16, get_i32, get_u16, put_bool, put_i16, put_i32, put_u16},
11 string_bytes::{compact_string_len, put_compact_string, put_string, string_len},
12 string_bytes_borrowed::{get_compact_string_borrowed, get_string_borrowed},
13 },
14 tagged_fields::{WriteTaggedFields, encode_to_bytes, read_tagged_fields, tagged_fields_len},
15};
16pub const API_KEY: i16 = 52;
17pub const MIN_VERSION: i16 = 0;
18pub const MAX_VERSION: i16 = 2;
19pub const FLEXIBLE_MIN: i16 = 0;
20#[inline]
21#[must_use]
22pub fn is_flexible(version: i16) -> bool {
23 version >= FLEXIBLE_MIN
24}
25#[derive(Debug, Clone, PartialEq, Eq, Default)]
26pub struct VoteResponse<'a> {
27 pub error_code: i16,
28 pub topics: Vec<TopicData<'a>>,
29 pub node_endpoints: Vec<vote_response::NodeEndpoint>,
30 pub unknown_tagged_fields: UnknownTaggedFields,
31}
32impl VoteResponse<'_> {
33 #[must_use]
34 pub fn to_owned(&self) -> vote_response::VoteResponse {
35 vote_response::VoteResponse {
36 error_code: (self.error_code),
37 topics: (self.topics).iter().map(TopicData::to_owned).collect(),
38 node_endpoints: self.node_endpoints.clone(),
39 unknown_tagged_fields: self.unknown_tagged_fields.clone(),
40 }
41 }
42}
43impl Encode for VoteResponse<'_> {
44 fn encode<B: BufMut>(&self, buf: &mut B, version: i16) -> Result<(), ProtocolError> {
45 if !(MIN_VERSION..=MAX_VERSION).contains(&version) {
46 return Err(ProtocolError::UnsupportedVersion {
47 api_key: API_KEY,
48 version,
49 });
50 }
51 let flex = is_flexible(version);
52 if version >= 0 {
53 put_i16(buf, self.error_code);
54 }
55 if version >= 0 {
56 {
57 put_array_len(buf, (self.topics).len(), flex)?;
58 for it in &self.topics {
59 it.encode(buf, version)?;
60 }
61 }
62 }
63 if flex {
64 let mut tagged = WriteTaggedFields::new();
65 if version >= 1 && !(is_default(&self.node_endpoints)) {
66 let payload = encode_to_bytes(
67 {
68 let prefix = array_len_prefix_len((self.node_endpoints).len(), flex);
69 let body: usize = (self.node_endpoints)
70 .iter()
71 .map(|it| it.encoded_len(version))
72 .sum();
73 prefix + body
74 },
75 |b| {
76 {
77 put_array_len(b, (self.node_endpoints).len(), flex)?;
78 for it in &self.node_endpoints {
79 it.encode(b, version)?;
80 }
81 }
82 Ok(())
83 },
84 )?;
85 tagged.add(0, payload);
86 }
87 tagged.write(buf, &self.unknown_tagged_fields)?;
88 }
89 Ok(())
90 }
91 fn encoded_len(&self, version: i16) -> usize {
92 let flex = is_flexible(version);
93 let mut n: usize = 0;
94 if version >= 0 {
95 n += 2;
96 }
97 if version >= 0 {
98 n += {
99 let prefix = array_len_prefix_len((self.topics).len(), flex);
100 let body: usize = (self.topics).iter().map(|it| it.encoded_len(version)).sum();
101 prefix + body
102 };
103 }
104 if flex {
105 let mut known_pairs: Vec<(u32, usize)> = Vec::new();
106 if version >= 1 && !(is_default(&self.node_endpoints)) {
107 known_pairs.push((0, {
108 let prefix = array_len_prefix_len((self.node_endpoints).len(), flex);
109 let body: usize = (self.node_endpoints)
110 .iter()
111 .map(|it| it.encoded_len(version))
112 .sum();
113 prefix + body
114 }));
115 }
116 n += tagged_fields_len(&known_pairs, &self.unknown_tagged_fields);
117 }
118 n
119 }
120}
121impl<'de> DecodeBorrow<'de> for VoteResponse<'de> {
122 fn decode_borrow(buf: &mut &'de [u8], version: i16) -> Result<Self, ProtocolError> {
123 if !(MIN_VERSION..=MAX_VERSION).contains(&version) {
124 return Err(ProtocolError::UnsupportedVersion {
125 api_key: API_KEY,
126 version,
127 });
128 }
129 let flex = is_flexible(version);
130 let mut out = Self::default();
131 if version >= 0 {
132 out.error_code = get_i16(buf)?;
133 }
134 if version >= 0 {
135 out.topics = {
136 let n = get_array_len(buf, flex)?;
137 let mut v = Vec::with_capacity(n);
138 for _ in 0..n {
139 v.push(TopicData::decode_borrow(buf, version)?);
140 }
141 v
142 };
143 }
144 if flex {
145 let mut tag_node_endpoints = None;
146 out.unknown_tagged_fields = read_tagged_fields(buf, |tag, payload| match tag {
147 0 if version >= 1 => {
148 tag_node_endpoints = Some({
149 let b: &mut &[u8] = payload;
150 {
151 let n = get_array_len(b, flex)?;
152 let mut v = Vec::with_capacity(n);
153 for _ in 0..n {
154 v.push(vote_response::NodeEndpoint::decode(b, version)?);
155 }
156 v
157 }
158 });
159 Ok(true)
160 }
161 0 => Err(ProtocolError::TagNotValidForVersion { tag: 0, version }),
162 _ => Ok(false),
163 })?;
164 if let Some(v) = tag_node_endpoints {
165 out.node_endpoints = v;
166 }
167 }
168 Ok(out)
169 }
170}
171#[cfg(test)]
172impl VoteResponse<'_> {
173 #[must_use]
174 pub fn populated(version: i16) -> Self {
175 let mut m = Self::default();
176 if version >= 0 {
177 m.error_code = 1i16;
178 }
179 if version >= 0 {
180 m.topics = vec![TopicData::populated(version)];
181 }
182 if version >= 1 {
183 m.node_endpoints = vec![vote_response::NodeEndpoint::populated(version)];
184 }
185 m
186 }
187}
188#[derive(Debug, Clone, PartialEq, Eq, Default)]
189pub struct TopicData<'a> {
190 pub topic_name: &'a str,
191 pub partitions: Vec<PartitionData>,
192 pub unknown_tagged_fields: UnknownTaggedFields,
193}
194impl TopicData<'_> {
195 #[must_use]
196 pub fn to_owned(&self) -> vote_response::TopicData {
197 vote_response::TopicData {
198 topic_name: (self.topic_name).to_owned(),
199 partitions: (self.partitions)
200 .iter()
201 .map(PartitionData::to_owned)
202 .collect(),
203 unknown_tagged_fields: self.unknown_tagged_fields.clone(),
204 }
205 }
206}
207impl Encode for TopicData<'_> {
208 fn encode<B: BufMut>(&self, buf: &mut B, version: i16) -> Result<(), ProtocolError> {
209 let flex = version >= 0;
210 if version >= 0 {
211 if flex {
212 put_compact_string(buf, self.topic_name)?;
213 } else {
214 put_string(buf, self.topic_name)?;
215 }
216 }
217 if version >= 0 {
218 {
219 put_array_len(buf, (self.partitions).len(), flex)?;
220 for it in &self.partitions {
221 it.encode(buf, version)?;
222 }
223 }
224 }
225 if flex {
226 let tagged = WriteTaggedFields::new();
227 tagged.write(buf, &self.unknown_tagged_fields)?;
228 }
229 Ok(())
230 }
231 fn encoded_len(&self, version: i16) -> usize {
232 let flex = version >= 0;
233 let mut n: usize = 0;
234 if version >= 0 {
235 n += if flex {
236 compact_string_len(self.topic_name)
237 } else {
238 string_len(self.topic_name)
239 };
240 }
241 if version >= 0 {
242 n += {
243 let prefix = array_len_prefix_len((self.partitions).len(), flex);
244 let body: usize = (self.partitions)
245 .iter()
246 .map(|it| it.encoded_len(version))
247 .sum();
248 prefix + body
249 };
250 }
251 if flex {
252 let known_pairs: Vec<(u32, usize)> = Vec::new();
253 n += tagged_fields_len(&known_pairs, &self.unknown_tagged_fields);
254 }
255 n
256 }
257}
258impl<'de> DecodeBorrow<'de> for TopicData<'de> {
259 fn decode_borrow(buf: &mut &'de [u8], version: i16) -> Result<Self, ProtocolError> {
260 let flex = version >= 0;
261 let mut out = Self::default();
262 if version >= 0 {
263 out.topic_name = if flex {
264 get_compact_string_borrowed(buf)?
265 } else {
266 get_string_borrowed(buf)?
267 };
268 }
269 if version >= 0 {
270 out.partitions = {
271 let n = get_array_len(buf, flex)?;
272 let mut v = Vec::with_capacity(n);
273 for _ in 0..n {
274 v.push(PartitionData::decode_borrow(buf, version)?);
275 }
276 v
277 };
278 }
279 if flex {
280 out.unknown_tagged_fields = read_tagged_fields(buf, |_tag, _payload| Ok(false))?;
281 }
282 Ok(out)
283 }
284}
285#[cfg(test)]
286impl TopicData<'_> {
287 #[must_use]
288 pub fn populated(version: i16) -> Self {
289 let mut m = Self::default();
290 if version >= 0 {
291 m.topic_name = "x";
292 }
293 if version >= 0 {
294 m.partitions = vec![PartitionData::populated(version)];
295 }
296 m
297 }
298}
299#[derive(Debug, Clone, PartialEq, Eq, Default)]
300pub struct PartitionData {
301 pub partition_index: i32,
302 pub error_code: i16,
303 pub leader_id: i32,
304 pub leader_epoch: i32,
305 pub vote_granted: bool,
306 pub unknown_tagged_fields: UnknownTaggedFields,
307}
308impl PartitionData {
309 #[must_use]
310 pub fn to_owned(&self) -> vote_response::PartitionData {
311 vote_response::PartitionData {
312 partition_index: (self.partition_index),
313 error_code: (self.error_code),
314 leader_id: (self.leader_id),
315 leader_epoch: (self.leader_epoch),
316 vote_granted: (self.vote_granted),
317 unknown_tagged_fields: self.unknown_tagged_fields.clone(),
318 }
319 }
320}
321impl Encode for PartitionData {
322 fn encode<B: BufMut>(&self, buf: &mut B, version: i16) -> Result<(), ProtocolError> {
323 let flex = version >= 0;
324 if version >= 0 {
325 put_i32(buf, self.partition_index);
326 }
327 if version >= 0 {
328 put_i16(buf, self.error_code);
329 }
330 if version >= 0 {
331 put_i32(buf, self.leader_id);
332 }
333 if version >= 0 {
334 put_i32(buf, self.leader_epoch);
335 }
336 if version >= 0 {
337 put_bool(buf, self.vote_granted);
338 }
339 if flex {
340 let tagged = WriteTaggedFields::new();
341 tagged.write(buf, &self.unknown_tagged_fields)?;
342 }
343 Ok(())
344 }
345 fn encoded_len(&self, version: i16) -> usize {
346 let flex = version >= 0;
347 let mut n: usize = 0;
348 if version >= 0 {
349 n += 4;
350 }
351 if version >= 0 {
352 n += 2;
353 }
354 if version >= 0 {
355 n += 4;
356 }
357 if version >= 0 {
358 n += 4;
359 }
360 if version >= 0 {
361 n += 1;
362 }
363 if flex {
364 let known_pairs: Vec<(u32, usize)> = Vec::new();
365 n += tagged_fields_len(&known_pairs, &self.unknown_tagged_fields);
366 }
367 n
368 }
369}
370impl<'de> DecodeBorrow<'de> for PartitionData {
371 fn decode_borrow(buf: &mut &'de [u8], version: i16) -> Result<Self, ProtocolError> {
372 let flex = version >= 0;
373 let mut out = Self::default();
374 if version >= 0 {
375 out.partition_index = get_i32(buf)?;
376 }
377 if version >= 0 {
378 out.error_code = get_i16(buf)?;
379 }
380 if version >= 0 {
381 out.leader_id = get_i32(buf)?;
382 }
383 if version >= 0 {
384 out.leader_epoch = get_i32(buf)?;
385 }
386 if version >= 0 {
387 out.vote_granted = get_bool(buf)?;
388 }
389 if flex {
390 out.unknown_tagged_fields = read_tagged_fields(buf, |_tag, _payload| Ok(false))?;
391 }
392 Ok(out)
393 }
394}
395#[cfg(test)]
396impl PartitionData {
397 #[must_use]
398 pub fn populated(version: i16) -> Self {
399 let mut m = Self::default();
400 if version >= 0 {
401 m.partition_index = 1i32;
402 }
403 if version >= 0 {
404 m.error_code = 1i16;
405 }
406 if version >= 0 {
407 m.leader_id = 1i32;
408 }
409 if version >= 0 {
410 m.leader_epoch = 1i32;
411 }
412 if version >= 0 {
413 m.vote_granted = true;
414 }
415 m
416 }
417}
418#[derive(Debug, Clone, PartialEq, Eq, Default)]
419pub struct NodeEndpoint<'a> {
420 pub node_id: i32,
421 pub host: &'a str,
422 pub port: u16,
423 pub unknown_tagged_fields: UnknownTaggedFields,
424}
425impl NodeEndpoint<'_> {
426 #[must_use]
427 pub fn to_owned(&self) -> vote_response::NodeEndpoint {
428 vote_response::NodeEndpoint {
429 node_id: (self.node_id),
430 host: (self.host).to_owned(),
431 port: (self.port),
432 unknown_tagged_fields: self.unknown_tagged_fields.clone(),
433 }
434 }
435}
436impl Encode for NodeEndpoint<'_> {
437 fn encode<B: BufMut>(&self, buf: &mut B, version: i16) -> Result<(), ProtocolError> {
438 let flex = version >= 0;
439 if version >= 1 {
440 put_i32(buf, self.node_id);
441 }
442 if version >= 1 {
443 if flex {
444 put_compact_string(buf, self.host)?;
445 } else {
446 put_string(buf, self.host)?;
447 }
448 }
449 if version >= 1 {
450 put_u16(buf, self.port);
451 }
452 if flex {
453 let tagged = WriteTaggedFields::new();
454 tagged.write(buf, &self.unknown_tagged_fields)?;
455 }
456 Ok(())
457 }
458 fn encoded_len(&self, version: i16) -> usize {
459 let flex = version >= 0;
460 let mut n: usize = 0;
461 if version >= 1 {
462 n += 4;
463 }
464 if version >= 1 {
465 n += if flex {
466 compact_string_len(self.host)
467 } else {
468 string_len(self.host)
469 };
470 }
471 if version >= 1 {
472 n += 2;
473 }
474 if flex {
475 let known_pairs: Vec<(u32, usize)> = Vec::new();
476 n += tagged_fields_len(&known_pairs, &self.unknown_tagged_fields);
477 }
478 n
479 }
480}
481impl<'de> DecodeBorrow<'de> for NodeEndpoint<'de> {
482 fn decode_borrow(buf: &mut &'de [u8], version: i16) -> Result<Self, ProtocolError> {
483 let flex = version >= 0;
484 let mut out = Self::default();
485 if version >= 1 {
486 out.node_id = get_i32(buf)?;
487 }
488 if version >= 1 {
489 out.host = if flex {
490 get_compact_string_borrowed(buf)?
491 } else {
492 get_string_borrowed(buf)?
493 };
494 }
495 if version >= 1 {
496 out.port = get_u16(buf)?;
497 }
498 if flex {
499 out.unknown_tagged_fields = read_tagged_fields(buf, |_tag, _payload| Ok(false))?;
500 }
501 Ok(out)
502 }
503}
504#[cfg(test)]
505impl NodeEndpoint<'_> {
506 #[must_use]
507 pub fn populated(version: i16) -> Self {
508 let mut m = Self::default();
509 if version >= 1 {
510 m.node_id = 1i32;
511 }
512 if version >= 1 {
513 m.host = "x";
514 }
515 if version >= 1 {
516 m.port = 1u16;
517 }
518 m
519 }
520}