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