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