crabka_protocol/opt/rustwide/workdir/generated/
BrokerHeartbeatRequest.borrowed.rs1use crate::primitives::fixed::{get_bool, get_i32, get_i64, put_bool, put_i32, put_i64};
3use crate::tagged_fields::{
4 WriteTaggedFields, encode_to_bytes, read_tagged_fields, tagged_fields_len,
5};
6use crate::{DecodeBorrow, Encode, ProtocolError, UnknownTaggedFields};
7use bytes::BufMut;
8pub const API_KEY: i16 = 63;
9pub const MIN_VERSION: i16 = 0;
10pub const MAX_VERSION: i16 = 2;
11pub const FLEXIBLE_MIN: i16 = 0;
12#[inline]
13fn is_flexible(version: i16) -> bool {
14 version >= FLEXIBLE_MIN
15}
16#[derive(Debug, Clone, PartialEq, Eq)]
17pub struct BrokerHeartbeatRequest {
18 pub broker_id: i32,
19 pub broker_epoch: i64,
20 pub current_metadata_offset: i64,
21 pub want_fence: bool,
22 pub want_shut_down: bool,
23 pub offline_log_dirs: Vec<crate::primitives::uuid::Uuid>,
24 pub cordoned_log_dirs: Option<Vec<crate::primitives::uuid::Uuid>>,
25 pub unknown_tagged_fields: UnknownTaggedFields,
26}
27impl Default for BrokerHeartbeatRequest {
28 fn default() -> Self {
29 Self {
30 broker_id: 0i32,
31 broker_epoch: -1i64,
32 current_metadata_offset: 0i64,
33 want_fence: false,
34 want_shut_down: false,
35 offline_log_dirs: Vec::new(),
36 cordoned_log_dirs: None,
37 unknown_tagged_fields: Default::default(),
38 }
39 }
40}
41impl BrokerHeartbeatRequest {
42 pub fn to_owned(&self) -> crate::owned::broker_heartbeat_request::BrokerHeartbeatRequest {
43 crate::owned::broker_heartbeat_request::BrokerHeartbeatRequest {
44 broker_id: (self.broker_id),
45 broker_epoch: (self.broker_epoch),
46 current_metadata_offset: (self.current_metadata_offset),
47 want_fence: (self.want_fence),
48 want_shut_down: (self.want_shut_down),
49 offline_log_dirs: (self.offline_log_dirs).clone(),
50 cordoned_log_dirs: (self.cordoned_log_dirs).clone(),
51 unknown_tagged_fields: self.unknown_tagged_fields.clone(),
52 }
53 }
54}
55impl Encode for BrokerHeartbeatRequest {
56 fn encode<B: BufMut>(&self, buf: &mut B, version: i16) -> Result<(), ProtocolError> {
57 if !(MIN_VERSION..=MAX_VERSION).contains(&version) {
58 return Err(ProtocolError::UnsupportedVersion {
59 api_key: API_KEY,
60 version,
61 });
62 }
63 let flex = is_flexible(version);
64 if version >= 0 {
65 put_i32(buf, self.broker_id);
66 }
67 if version >= 0 {
68 put_i64(buf, self.broker_epoch);
69 }
70 if version >= 0 {
71 put_i64(buf, self.current_metadata_offset);
72 }
73 if version >= 0 {
74 put_bool(buf, self.want_fence);
75 }
76 if version >= 0 {
77 put_bool(buf, self.want_shut_down);
78 }
79 if flex {
80 let mut tagged = WriteTaggedFields::new();
81 if !(crate::codegen_helpers::is_default(&self.offline_log_dirs)) {
82 let payload = encode_to_bytes(
83 {
84 let prefix = crate::primitives::array::array_len_prefix_len(
85 (self.offline_log_dirs).len(),
86 flex,
87 );
88 let body: usize = (self.offline_log_dirs).iter().map(|_| 16).sum();
89 prefix + body
90 },
91 |b| {
92 {
93 crate::primitives::array::put_array_len(
94 b,
95 (self.offline_log_dirs).len(),
96 flex,
97 );
98 for it in &self.offline_log_dirs {
99 crate::primitives::uuid::put_uuid(b, *it);
100 }
101 };
102 Ok(())
103 },
104 );
105 tagged.add(0, payload);
106 }
107 if !(self.cordoned_log_dirs.is_none()) {
108 let payload = encode_to_bytes(
109 {
110 let opt: Option<&Vec<_>> = (self.cordoned_log_dirs).as_ref();
111 let prefix = crate::primitives::array::nullable_array_len_prefix_len(
112 opt.map(std::vec::Vec::len),
113 flex,
114 );
115 let body: usize = opt.map_or(0, |v| v.iter().map(|_| 16).sum());
116 prefix + body
117 },
118 |b| {
119 {
120 let len = (self.cordoned_log_dirs).as_ref().map(Vec::len);
121 crate::primitives::array::put_nullable_array_len(b, len, flex);
122 if let Some(v) = &self.cordoned_log_dirs {
123 for it in v {
124 crate::primitives::uuid::put_uuid(b, *it);
125 }
126 }
127 };
128 Ok(())
129 },
130 );
131 tagged.add(1, payload);
132 }
133 tagged.write(buf, &self.unknown_tagged_fields);
134 }
135 Ok(())
136 }
137 fn encoded_len(&self, version: i16) -> usize {
138 let flex = is_flexible(version);
139 let mut n: usize = 0;
140 if version >= 0 {
141 n += 4;
142 }
143 if version >= 0 {
144 n += 8;
145 }
146 if version >= 0 {
147 n += 8;
148 }
149 if version >= 0 {
150 n += 1;
151 }
152 if version >= 0 {
153 n += 1;
154 }
155 if flex {
156 let mut known_pairs: Vec<(u32, usize)> = Vec::new();
157 if !(crate::codegen_helpers::is_default(&self.offline_log_dirs)) {
158 known_pairs.push((0, {
159 let prefix = crate::primitives::array::array_len_prefix_len(
160 (self.offline_log_dirs).len(),
161 flex,
162 );
163 let body: usize = (self.offline_log_dirs).iter().map(|_| 16).sum();
164 prefix + body
165 }));
166 }
167 if !(self.cordoned_log_dirs.is_none()) {
168 known_pairs.push((1, {
169 let opt: Option<&Vec<_>> = (self.cordoned_log_dirs).as_ref();
170 let prefix = crate::primitives::array::nullable_array_len_prefix_len(
171 opt.map(std::vec::Vec::len),
172 flex,
173 );
174 let body: usize = opt.map_or(0, |v| v.iter().map(|_| 16).sum());
175 prefix + body
176 }));
177 }
178 n += tagged_fields_len(&known_pairs, &self.unknown_tagged_fields);
179 }
180 n
181 }
182}
183impl<'de> DecodeBorrow<'de> for BrokerHeartbeatRequest {
184 fn decode_borrow(buf: &mut &'de [u8], version: i16) -> Result<Self, ProtocolError> {
185 if !(MIN_VERSION..=MAX_VERSION).contains(&version) {
186 return Err(ProtocolError::UnsupportedVersion {
187 api_key: API_KEY,
188 version,
189 });
190 }
191 let flex = is_flexible(version);
192 let mut out = Self::default();
193 if version >= 0 {
194 out.broker_id = get_i32(buf)?;
195 }
196 if version >= 0 {
197 out.broker_epoch = get_i64(buf)?;
198 }
199 if version >= 0 {
200 out.current_metadata_offset = get_i64(buf)?;
201 }
202 if version >= 0 {
203 out.want_fence = get_bool(buf)?;
204 }
205 if version >= 0 {
206 out.want_shut_down = get_bool(buf)?;
207 }
208 if flex {
209 let mut tag_offline_log_dirs = None;
210 let mut tag_cordoned_log_dirs = None;
211 out.unknown_tagged_fields = read_tagged_fields(buf, |tag, payload| match tag {
212 0 => {
213 tag_offline_log_dirs = Some({
214 let b: &mut &[u8] = payload;
215 {
216 let n = crate::primitives::array::get_array_len(b, flex)?;
217 let mut v = Vec::with_capacity(n);
218 for _ in 0..n {
219 v.push(crate::primitives::uuid::get_uuid(b)?);
220 }
221 v
222 }
223 });
224 Ok(true)
225 }
226 1 => {
227 tag_cordoned_log_dirs = Some({
228 let b: &mut &[u8] = payload;
229 {
230 let opt = crate::primitives::array::get_nullable_array_len(b, flex)?;
231 match opt {
232 None => None,
233 Some(n) => {
234 let mut v = Vec::with_capacity(n);
235 for _ in 0..n {
236 v.push(crate::primitives::uuid::get_uuid(b)?);
237 }
238 Some(v)
239 }
240 }
241 }
242 });
243 Ok(true)
244 }
245 _ => Ok(false),
246 })?;
247 if let Some(v) = tag_offline_log_dirs {
248 out.offline_log_dirs = v;
249 }
250 if let Some(v) = tag_cordoned_log_dirs {
251 out.cordoned_log_dirs = v;
252 }
253 }
254 Ok(out)
255 }
256}
257#[cfg(test)]
258impl BrokerHeartbeatRequest {
259 #[must_use]
260 pub fn populated(version: i16) -> Self {
261 let mut m = Self::default();
262 if version >= 0 {
263 m.broker_id = 1i32;
264 }
265 if version >= 0 {
266 m.broker_epoch = 1i64;
267 }
268 if version >= 0 {
269 m.current_metadata_offset = 1i64;
270 }
271 if version >= 0 {
272 m.want_fence = true;
273 }
274 if version >= 0 {
275 m.want_shut_down = true;
276 }
277 if version >= 1 {
278 m.offline_log_dirs = vec![crate::primitives::uuid::Uuid([1u8; 16])];
279 }
280 if version >= 2 {
281 m.cordoned_log_dirs = Some(vec![crate::primitives::uuid::Uuid([1u8; 16])]);
282 }
283 m
284 }
285}