Skip to main content

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

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