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