crabka_protocol/opt/rustwide/workdir/generated/
BrokerHeartbeatRequest.borrowed.rs1use bytes::BufMut;
4
5use crate::primitives::fixed::{get_bool, get_i32, get_i64, put_bool, put_i32, put_i64};
6use crate::tagged_fields::{encode_to_bytes, read_tagged_fields, tagged_fields_len, WriteTaggedFields};
7use crate::{DecodeBorrow, Encode, ProtocolError, UnknownTaggedFields};
8
9pub const API_KEY: i16 = 63;
10pub const MIN_VERSION: i16 = 0;
11pub const MAX_VERSION: i16 = 2;
12pub const FLEXIBLE_MIN: i16 = 0;
13
14#[inline]
15fn is_flexible(version: i16) -> bool { version >= FLEXIBLE_MIN }
16
17#[derive(Debug, Clone, PartialEq, Eq)]
18pub struct BrokerHeartbeatRequest {
19 pub broker_id: i32,
20 pub broker_epoch: i64,
21 pub current_metadata_offset: i64,
22 pub want_fence: bool,
23 pub want_shut_down: bool,
24 pub offline_log_dirs: Vec<crate::primitives::uuid::Uuid>,
25 pub cordoned_log_dirs: Option<Vec<crate::primitives::uuid::Uuid>>,
26 pub unknown_tagged_fields: UnknownTaggedFields,
27}
28
29impl Default for BrokerHeartbeatRequest {
30 fn default() -> Self {
31 Self {
32 broker_id: 0i32,
33 broker_epoch: -1i64,
34 current_metadata_offset: 0i64,
35 want_fence: false,
36 want_shut_down: false,
37 offline_log_dirs: Vec::new(),
38 cordoned_log_dirs: None,
39 unknown_tagged_fields: Default::default(),
40 }
41 }
42}
43
44impl BrokerHeartbeatRequest {
45 pub fn to_owned(&self) -> crate::owned::broker_heartbeat_request::BrokerHeartbeatRequest {
46 crate::owned::broker_heartbeat_request::BrokerHeartbeatRequest {
47 broker_id: (self.broker_id),
48 broker_epoch: (self.broker_epoch),
49 current_metadata_offset: (self.current_metadata_offset),
50 want_fence: (self.want_fence),
51 want_shut_down: (self.want_shut_down),
52 offline_log_dirs: (self.offline_log_dirs).clone(),
53 cordoned_log_dirs: (self.cordoned_log_dirs).clone(),
54 unknown_tagged_fields: self.unknown_tagged_fields.clone(),
55 }
56 }
57}
58
59impl Encode for BrokerHeartbeatRequest {
60 fn encode<B: BufMut>(&self, buf: &mut B, version: i16) -> Result<(), ProtocolError> {
61 if !(MIN_VERSION..=MAX_VERSION).contains(&version) {
62 return Err(ProtocolError::UnsupportedVersion { api_key: API_KEY, version });
63 }
64 let flex = is_flexible(version);
65 if version >= 0 { put_i32(buf, self.broker_id) }
66 if version >= 0 { put_i64(buf, self.broker_epoch) }
67 if version >= 0 { put_i64(buf, self.current_metadata_offset) }
68 if version >= 0 { put_bool(buf, self.want_fence) }
69 if version >= 0 { put_bool(buf, self.want_shut_down) }
70 if flex {
71 let mut tagged = WriteTaggedFields::new();
72 if !(crate::codegen_helpers::is_default(&self.offline_log_dirs)) {
73 let payload = encode_to_bytes({ let prefix = crate::primitives::array::array_len_prefix_len((self.offline_log_dirs).len(), flex); let body: usize = (self.offline_log_dirs).iter().map(|_| 16).sum(); prefix + body }, |b| { { crate::primitives::array::put_array_len(b, (self.offline_log_dirs).len(), flex); for it in &self.offline_log_dirs { crate::primitives::uuid::put_uuid(b, *it); } }; Ok(()) });
74 tagged.add(0, payload);
75 }
76 if !(self.cordoned_log_dirs.is_none()) {
77 let payload = encode_to_bytes({ let opt: Option<&Vec<_>> = (self.cordoned_log_dirs).as_ref(); let prefix = crate::primitives::array::nullable_array_len_prefix_len(opt.map(|v| v.len()), flex); let body: usize = opt.map_or(0, |v| v.iter().map(|_| 16).sum()); prefix + body }, |b| { { let len = (self.cordoned_log_dirs).as_ref().map(Vec::len); crate::primitives::array::put_nullable_array_len(b, len, flex); if let Some(v) = &self.cordoned_log_dirs { for it in v { crate::primitives::uuid::put_uuid(b, *it); } } }; Ok(()) });
78 tagged.add(1, payload);
79 }
80 tagged.write(buf, &self.unknown_tagged_fields);
81 }
82 Ok(())
83 }
84 fn encoded_len(&self, version: i16) -> usize {
85 let flex = is_flexible(version);
86 let mut n: usize = 0;
87 if version >= 0 { n += 4; }
88 if version >= 0 { n += 8; }
89 if version >= 0 { n += 8; }
90 if version >= 0 { n += 1; }
91 if version >= 0 { n += 1; }
92 if flex {
93 let mut known_pairs: Vec<(u32, usize)> = Vec::new();
94 if !(crate::codegen_helpers::is_default(&self.offline_log_dirs)) {
95 known_pairs.push((0, { let prefix = crate::primitives::array::array_len_prefix_len((self.offline_log_dirs).len(), flex); let body: usize = (self.offline_log_dirs).iter().map(|_| 16).sum(); prefix + body }));
96 }
97 if !(self.cordoned_log_dirs.is_none()) {
98 known_pairs.push((1, { let opt: Option<&Vec<_>> = (self.cordoned_log_dirs).as_ref(); let prefix = crate::primitives::array::nullable_array_len_prefix_len(opt.map(|v| v.len()), flex); let body: usize = opt.map_or(0, |v| v.iter().map(|_| 16).sum()); prefix + body }));
99 }
100 n += tagged_fields_len(&known_pairs, &self.unknown_tagged_fields);
101 }
102 n
103 }
104}
105
106impl<'de> DecodeBorrow<'de> for BrokerHeartbeatRequest {
107 fn decode_borrow(buf: &mut &'de [u8], version: i16) -> Result<Self, ProtocolError> {
108 if !(MIN_VERSION..=MAX_VERSION).contains(&version) {
109 return Err(ProtocolError::UnsupportedVersion { api_key: API_KEY, version });
110 }
111 let flex = is_flexible(version);
112 let mut out = Self::default();
113 if version >= 0 { out.broker_id = get_i32(buf)?; }
114 if version >= 0 { out.broker_epoch = get_i64(buf)?; }
115 if version >= 0 { out.current_metadata_offset = get_i64(buf)?; }
116 if version >= 0 { out.want_fence = get_bool(buf)?; }
117 if version >= 0 { out.want_shut_down = get_bool(buf)?; }
118 if flex {
119 let mut tag_offline_log_dirs = None;
121 let mut tag_cordoned_log_dirs = None;
122 out.unknown_tagged_fields = read_tagged_fields(buf, |tag, payload| {
123 match tag {
124 0 => { tag_offline_log_dirs = Some({ let b: &mut &[u8] = payload; { let n = crate::primitives::array::get_array_len(b, flex)?; let mut v = Vec::with_capacity(n); for _ in 0..n { v.push(crate::primitives::uuid::get_uuid(b)?); } v } }); Ok(true) }
125 1 => { tag_cordoned_log_dirs = Some({ let b: &mut &[u8] = payload; { let opt = crate::primitives::array::get_nullable_array_len(b, flex)?; match opt { None => None, Some(n) => { let mut v = Vec::with_capacity(n); for _ in 0..n { v.push(crate::primitives::uuid::get_uuid(b)?); } Some(v) } } } }); Ok(true) }
126 _ => Ok(false),
127 }
128 })?;
129 if let Some(v) = tag_offline_log_dirs { out.offline_log_dirs = v; }
130 if let Some(v) = tag_cordoned_log_dirs { out.cordoned_log_dirs = v; }
131 }
132 Ok(out)
133 }
134}