Skip to main content

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

1// AUTO-GENERATED by crabka-protocol-codegen against a9ce3221537b8653448750697915607dc7936cf3. Do not edit.
2
3use bytes::BufMut;
4
5use crate::primitives::fixed::{get_i16, get_i32, put_i16, put_i32};
6use crate::primitives::string_bytes::{
7    compact_nullable_string_len, compact_string_len, nullable_string_len,
8    put_compact_nullable_string, put_compact_string, put_nullable_string, put_string, string_len,
9};
10use crate::primitives::string_bytes_borrowed::{
11    get_compact_nullable_string_borrowed, get_compact_string_borrowed,
12    get_nullable_string_borrowed, get_string_borrowed,
13};
14use crate::tagged_fields::{WriteTaggedFields, read_tagged_fields, tagged_fields_len};
15use crate::{DecodeBorrow, Encode, ProtocolError, UnknownTaggedFields};
16
17pub const API_KEY: i16 = 13;
18pub const MIN_VERSION: i16 = 0;
19pub const MAX_VERSION: i16 = 5;
20pub const FLEXIBLE_MIN: i16 = 4;
21
22#[inline]
23fn is_flexible(version: i16) -> bool {
24    version >= FLEXIBLE_MIN
25}
26
27#[derive(Debug, Clone, PartialEq, Eq, Default)]
28pub struct LeaveGroupResponse<'a> {
29    pub throttle_time_ms: i32,
30    pub error_code: i16,
31    pub members: Vec<MemberResponse<'a>>,
32    pub unknown_tagged_fields: UnknownTaggedFields,
33}
34impl LeaveGroupResponse<'_> {
35    pub fn to_owned(&self) -> crate::owned::leave_group_response::LeaveGroupResponse {
36        crate::owned::leave_group_response::LeaveGroupResponse {
37            throttle_time_ms: (self.throttle_time_ms),
38            error_code: (self.error_code),
39            members: (self.members)
40                .iter()
41                .map(MemberResponse::to_owned)
42                .collect(),
43            unknown_tagged_fields: self.unknown_tagged_fields.clone(),
44        }
45    }
46}
47impl Encode for LeaveGroupResponse<'_> {
48    fn encode<B: BufMut>(&self, buf: &mut B, version: i16) -> Result<(), ProtocolError> {
49        if !(MIN_VERSION..=MAX_VERSION).contains(&version) {
50            return Err(ProtocolError::UnsupportedVersion {
51                api_key: API_KEY,
52                version,
53            });
54        }
55        let flex = is_flexible(version);
56        if version >= 1 {
57            put_i32(buf, self.throttle_time_ms);
58        }
59        if version >= 0 {
60            put_i16(buf, self.error_code);
61        }
62        if version >= 3 {
63            {
64                crate::primitives::array::put_array_len(buf, (self.members).len(), flex);
65                for it in &self.members {
66                    it.encode(buf, version)?;
67                }
68            }
69        }
70        if flex {
71            let tagged = WriteTaggedFields::new();
72            tagged.write(buf, &self.unknown_tagged_fields);
73        }
74        Ok(())
75    }
76    fn encoded_len(&self, version: i16) -> usize {
77        let flex = is_flexible(version);
78        let mut n: usize = 0;
79        if version >= 1 {
80            n += 4;
81        }
82        if version >= 0 {
83            n += 2;
84        }
85        if version >= 3 {
86            n += {
87                let prefix =
88                    crate::primitives::array::array_len_prefix_len((self.members).len(), flex);
89                let body: usize = (self.members)
90                    .iter()
91                    .map(|it| it.encoded_len(version))
92                    .sum();
93                prefix + body
94            };
95        }
96        if flex {
97            let known_pairs: Vec<(u32, usize)> = Vec::new();
98            n += tagged_fields_len(&known_pairs, &self.unknown_tagged_fields);
99        }
100        n
101    }
102}
103impl<'de> DecodeBorrow<'de> for LeaveGroupResponse<'de> {
104    fn decode_borrow(buf: &mut &'de [u8], version: i16) -> Result<Self, ProtocolError> {
105        if !(MIN_VERSION..=MAX_VERSION).contains(&version) {
106            return Err(ProtocolError::UnsupportedVersion {
107                api_key: API_KEY,
108                version,
109            });
110        }
111        let flex = is_flexible(version);
112        let mut out = Self::default();
113        if version >= 1 {
114            out.throttle_time_ms = get_i32(buf)?;
115        }
116        if version >= 0 {
117            out.error_code = get_i16(buf)?;
118        }
119        if version >= 3 {
120            out.members = {
121                let n = crate::primitives::array::get_array_len(buf, flex)?;
122                let mut v = Vec::with_capacity(n);
123                for _ in 0..n {
124                    v.push(MemberResponse::decode_borrow(buf, version)?);
125                }
126                v
127            };
128        }
129        if flex {
130            out.unknown_tagged_fields = read_tagged_fields(buf, |_tag, _payload| Ok(false))?;
131        }
132        Ok(out)
133    }
134}
135#[cfg(test)]
136impl LeaveGroupResponse<'_> {
137    #[must_use]
138    pub fn populated(version: i16) -> Self {
139        let mut m = Self::default();
140        if version >= 1 {
141            m.throttle_time_ms = 1i32;
142        }
143        if version >= 0 {
144            m.error_code = 1i16;
145        }
146        if version >= 3 {
147            m.members = vec![MemberResponse::populated(version)];
148        }
149        m
150    }
151}
152#[derive(Debug, Clone, PartialEq, Eq, Default)]
153pub struct MemberResponse<'a> {
154    pub member_id: &'a str,
155    pub group_instance_id: Option<&'a str>,
156    pub error_code: i16,
157    pub unknown_tagged_fields: UnknownTaggedFields,
158}
159impl MemberResponse<'_> {
160    pub fn to_owned(&self) -> crate::owned::leave_group_response::MemberResponse {
161        crate::owned::leave_group_response::MemberResponse {
162            member_id: (self.member_id).to_string(),
163            group_instance_id: (self.group_instance_id).map(std::string::ToString::to_string),
164            error_code: (self.error_code),
165            unknown_tagged_fields: self.unknown_tagged_fields.clone(),
166        }
167    }
168}
169impl Encode for MemberResponse<'_> {
170    fn encode<B: BufMut>(&self, buf: &mut B, version: i16) -> Result<(), ProtocolError> {
171        let flex = version >= 4;
172        if version >= 3 {
173            if flex {
174                put_compact_string(buf, self.member_id);
175            } else {
176                put_string(buf, self.member_id);
177            }
178        }
179        if version >= 3 {
180            if flex {
181                put_compact_nullable_string(buf, self.group_instance_id);
182            } else {
183                put_nullable_string(buf, self.group_instance_id);
184            }
185        }
186        if version >= 3 {
187            put_i16(buf, self.error_code);
188        }
189        if flex {
190            let tagged = WriteTaggedFields::new();
191            tagged.write(buf, &self.unknown_tagged_fields);
192        }
193        Ok(())
194    }
195    fn encoded_len(&self, version: i16) -> usize {
196        let flex = version >= 4;
197        let mut n: usize = 0;
198        if version >= 3 {
199            n += if flex {
200                compact_string_len(self.member_id)
201            } else {
202                string_len(self.member_id)
203            };
204        }
205        if version >= 3 {
206            n += if flex {
207                compact_nullable_string_len(self.group_instance_id)
208            } else {
209                nullable_string_len(self.group_instance_id)
210            };
211        }
212        if version >= 3 {
213            n += 2;
214        }
215        if flex {
216            let known_pairs: Vec<(u32, usize)> = Vec::new();
217            n += tagged_fields_len(&known_pairs, &self.unknown_tagged_fields);
218        }
219        n
220    }
221}
222impl<'de> DecodeBorrow<'de> for MemberResponse<'de> {
223    fn decode_borrow(buf: &mut &'de [u8], version: i16) -> Result<Self, ProtocolError> {
224        let flex = version >= 4;
225        let mut out = Self::default();
226        if version >= 3 {
227            out.member_id = if flex {
228                get_compact_string_borrowed(buf)?
229            } else {
230                get_string_borrowed(buf)?
231            };
232        }
233        if version >= 3 {
234            out.group_instance_id = if flex {
235                get_compact_nullable_string_borrowed(buf)?
236            } else {
237                get_nullable_string_borrowed(buf)?
238            };
239        }
240        if version >= 3 {
241            out.error_code = get_i16(buf)?;
242        }
243        if flex {
244            out.unknown_tagged_fields = read_tagged_fields(buf, |_tag, _payload| Ok(false))?;
245        }
246        Ok(out)
247    }
248}
249#[cfg(test)]
250impl MemberResponse<'_> {
251    #[must_use]
252    pub fn populated(version: i16) -> Self {
253        let mut m = Self::default();
254        if version >= 3 {
255            m.member_id = "x";
256        }
257        if version >= 3 {
258            m.group_instance_id = Some("x");
259        }
260        if version >= 3 {
261            m.error_code = 1i16;
262        }
263        m
264    }
265}