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