Skip to main content

crabka_protocol/opt/rustwide/workdir/generated/
BrokerHeartbeatRequest.borrowed.rs

1// AUTO-GENERATED by crabka-protocol-codegen against a9ce3221537b8653448750697915607dc7936cf3. Do not edit.
2use 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}