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