Skip to main content

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

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