Skip to main content

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

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