krabka_protocol/opt/rustwide/workdir/generated/
LeaveGroupRequest.borrowed.rs1use 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}