Skip to main content

crabka_protocol/opt/rustwide/workdir/generated/
ApiVersionsResponse.owned.rs

1// AUTO-GENERATED by crabka-protocol-codegen against a9ce3221537b8653448750697915607dc7936cf3. Do not edit.
2
3use bytes::{Buf, BufMut};
4
5use crate::primitives::fixed::{get_bool, get_i16, get_i32, get_i64, put_bool, put_i16, put_i32, put_i64};
6use crate::primitives::string_bytes::{
7    compact_string_len, get_compact_string_owned, get_string_owned,
8    put_compact_string, put_string, string_len,
9};
10use crate::tagged_fields::{encode_to_bytes, read_tagged_fields, tagged_fields_len, WriteTaggedFields};
11use crate::{Decode, Encode, ProtocolError, UnknownTaggedFields};
12
13pub const API_KEY: i16 = 18;
14pub const MIN_VERSION: i16 = 0;
15pub const MAX_VERSION: i16 = 4;
16pub const FLEXIBLE_MIN: i16 = 3;
17
18#[inline]
19fn is_flexible(version: i16) -> bool { version >= FLEXIBLE_MIN }
20
21#[derive(Debug, Clone, PartialEq, Eq)]
22pub struct ApiVersionsResponse {
23    pub error_code: i16,
24    pub api_keys: Vec<ApiVersion>,
25    pub throttle_time_ms: i32,
26    pub supported_features: Vec<SupportedFeatureKey>,
27    pub finalized_features_epoch: i64,
28    pub finalized_features: Vec<FinalizedFeatureKey>,
29    pub zk_migration_ready: bool,
30    pub unknown_tagged_fields: UnknownTaggedFields,
31}
32
33impl Default for ApiVersionsResponse {
34    fn default() -> Self {
35        Self {
36            error_code: 0i16,
37            api_keys: Vec::new(),
38            throttle_time_ms: 0i32,
39            supported_features: Vec::new(),
40            finalized_features_epoch: -1i64,
41            finalized_features: Vec::new(),
42            zk_migration_ready: false,
43            unknown_tagged_fields: Default::default(),
44        }
45    }
46}
47
48impl Encode for ApiVersionsResponse {
49    fn encode<B: BufMut>(&self, buf: &mut B, version: i16) -> Result<(), ProtocolError> {
50        if !(MIN_VERSION..=MAX_VERSION).contains(&version) {
51            return Err(ProtocolError::UnsupportedVersion { api_key: API_KEY, version });
52        }
53        let flex = is_flexible(version);
54        if version >= 0 { put_i16(buf, self.error_code) }
55        if version >= 0 { { crate::primitives::array::put_array_len(buf, (self.api_keys).len(), flex); for it in &self.api_keys { it.encode(buf, version)?; } } }
56        if version >= 1 { put_i32(buf, self.throttle_time_ms) }
57        if flex {
58            let mut tagged = WriteTaggedFields::new();
59            if !(crate::codegen_helpers::is_default(&self.supported_features)) {
60                let payload = encode_to_bytes({ let prefix = crate::primitives::array::array_len_prefix_len((self.supported_features).len(), flex); let body: usize = (self.supported_features).iter().map(|it| it.encoded_len(version)).sum(); prefix + body }, |b| { { crate::primitives::array::put_array_len(b, (self.supported_features).len(), flex); for it in &self.supported_features { it.encode(b, version)?; } }; Ok(()) });
61                tagged.add(0, payload);
62            }
63            if !(self.finalized_features_epoch == -1i64) {
64                let payload = encode_to_bytes(8, |b| { put_i64(b, self.finalized_features_epoch); Ok(()) });
65                tagged.add(1, payload);
66            }
67            if !(crate::codegen_helpers::is_default(&self.finalized_features)) {
68                let payload = encode_to_bytes({ let prefix = crate::primitives::array::array_len_prefix_len((self.finalized_features).len(), flex); let body: usize = (self.finalized_features).iter().map(|it| it.encoded_len(version)).sum(); prefix + body }, |b| { { crate::primitives::array::put_array_len(b, (self.finalized_features).len(), flex); for it in &self.finalized_features { it.encode(b, version)?; } }; Ok(()) });
69                tagged.add(2, payload);
70            }
71            if !(self.zk_migration_ready == false) {
72                let payload = encode_to_bytes(1, |b| { put_bool(b, self.zk_migration_ready); Ok(()) });
73                tagged.add(3, payload);
74            }
75            tagged.write(buf, &self.unknown_tagged_fields);
76        }
77        Ok(())
78    }
79    fn encoded_len(&self, version: i16) -> usize {
80        let flex = is_flexible(version);
81        let mut n: usize = 0;
82        if version >= 0 { n += 2; }
83        if version >= 0 { n += { let prefix = crate::primitives::array::array_len_prefix_len((self.api_keys).len(), flex); let body: usize = (self.api_keys).iter().map(|it| it.encoded_len(version)).sum(); prefix + body }; }
84        if version >= 1 { n += 4; }
85        if flex {
86            let mut known_pairs: Vec<(u32, usize)> = Vec::new();
87            if !(crate::codegen_helpers::is_default(&self.supported_features)) {
88                known_pairs.push((0, { let prefix = crate::primitives::array::array_len_prefix_len((self.supported_features).len(), flex); let body: usize = (self.supported_features).iter().map(|it| it.encoded_len(version)).sum(); prefix + body }));
89            }
90            if !(self.finalized_features_epoch == -1i64) {
91                known_pairs.push((1, 8));
92            }
93            if !(crate::codegen_helpers::is_default(&self.finalized_features)) {
94                known_pairs.push((2, { let prefix = crate::primitives::array::array_len_prefix_len((self.finalized_features).len(), flex); let body: usize = (self.finalized_features).iter().map(|it| it.encoded_len(version)).sum(); prefix + body }));
95            }
96            if !(self.zk_migration_ready == false) {
97                known_pairs.push((3, 1));
98            }
99            n += tagged_fields_len(&known_pairs, &self.unknown_tagged_fields);
100        }
101        n
102    }
103}
104
105impl<'de> Decode<'de> for ApiVersionsResponse {
106    fn decode<B: Buf>(buf: &mut B, version: i16) -> Result<Self, ProtocolError> {
107        if !(MIN_VERSION..=MAX_VERSION).contains(&version) {
108            return Err(ProtocolError::UnsupportedVersion { api_key: API_KEY, version });
109        }
110        let flex = is_flexible(version);
111        let mut out = Self::default();
112        if version >= 0 { out.error_code = get_i16(buf)?; }
113        if version >= 0 { out.api_keys = { let n = crate::primitives::array::get_array_len(buf, flex)?; let mut v = Vec::with_capacity(n); for _ in 0..n { v.push(ApiVersion::decode(buf, version)?); } v }; }
114        if version >= 1 { out.throttle_time_ms = get_i32(buf)?; }
115        if flex {
116            // Pre-declare typed slots for known tagged fields.
117            let mut tag_supported_features = None;
118            let mut tag_finalized_features_epoch = None;
119            let mut tag_finalized_features = None;
120            let mut tag_zk_migration_ready = None;
121            out.unknown_tagged_fields = read_tagged_fields(buf, |tag, payload| {
122                match tag {
123                0 => { tag_supported_features = Some({ let b: &mut &[u8] = payload; { let n = crate::primitives::array::get_array_len(b, flex)?; let mut v = Vec::with_capacity(n); for _ in 0..n { v.push(SupportedFeatureKey::decode(b, version)?); } v } }); Ok(true) }
124                1 => { tag_finalized_features_epoch = Some({ let b: &mut &[u8] = payload; get_i64(b)? }); Ok(true) }
125                2 => { tag_finalized_features = Some({ let b: &mut &[u8] = payload; { let n = crate::primitives::array::get_array_len(b, flex)?; let mut v = Vec::with_capacity(n); for _ in 0..n { v.push(FinalizedFeatureKey::decode(b, version)?); } v } }); Ok(true) }
126                3 => { tag_zk_migration_ready = Some({ let b: &mut &[u8] = payload; get_bool(b)? }); Ok(true) }
127                    _ => Ok(false),
128                }
129            })?;
130            if let Some(v) = tag_supported_features { out.supported_features = v; }
131            if let Some(v) = tag_finalized_features_epoch { out.finalized_features_epoch = v; }
132            if let Some(v) = tag_finalized_features { out.finalized_features = v; }
133            if let Some(v) = tag_zk_migration_ready { out.zk_migration_ready = v; }
134        }
135        Ok(out)
136    }
137}
138
139#[derive(Debug, Clone, PartialEq, Eq, Default)]
140pub struct ApiVersion {
141    pub api_key: i16,
142    pub min_version: i16,
143    pub max_version: i16,
144    pub unknown_tagged_fields: UnknownTaggedFields,
145}
146
147impl Encode for ApiVersion {
148    fn encode<B: BufMut>(&self, buf: &mut B, version: i16) -> Result<(), ProtocolError> {
149        let flex = version >= 3;
150        if version >= 0 { put_i16(buf, self.api_key) }
151        if version >= 0 { put_i16(buf, self.min_version) }
152        if version >= 0 { put_i16(buf, self.max_version) }
153        if flex {
154            let tagged = WriteTaggedFields::new();
155            tagged.write(buf, &self.unknown_tagged_fields);
156        }
157        Ok(())
158    }
159    fn encoded_len(&self, version: i16) -> usize {
160        let flex = version >= 3;
161        let mut n: usize = 0;
162        if version >= 0 { n += 2; }
163        if version >= 0 { n += 2; }
164        if version >= 0 { n += 2; }
165        if flex {
166            let known_pairs: Vec<(u32, usize)> = Vec::new();
167            n += tagged_fields_len(&known_pairs, &self.unknown_tagged_fields);
168        }
169        n
170    }
171}
172
173impl<'de> Decode<'de> for ApiVersion {
174    fn decode<B: Buf>(buf: &mut B, version: i16) -> Result<Self, ProtocolError> {
175        let flex = version >= 3;
176        let mut out = Self::default();
177        if version >= 0 { out.api_key = get_i16(buf)?; }
178        if version >= 0 { out.min_version = get_i16(buf)?; }
179        if version >= 0 { out.max_version = get_i16(buf)?; }
180        if flex {
181            out.unknown_tagged_fields = read_tagged_fields(buf, |_tag, _payload| {
182                Ok(false)
183            })?;
184        }
185        Ok(out)
186    }
187}
188
189#[derive(Debug, Clone, PartialEq, Eq, Default)]
190pub struct SupportedFeatureKey {
191    pub name: String,
192    pub min_version: i16,
193    pub max_version: i16,
194    pub unknown_tagged_fields: UnknownTaggedFields,
195}
196
197impl Encode for SupportedFeatureKey {
198    fn encode<B: BufMut>(&self, buf: &mut B, version: i16) -> Result<(), ProtocolError> {
199        let flex = version >= 3;
200        if version >= 3 { if flex { put_compact_string(buf, &self.name) } else { put_string(buf, &self.name) } }
201        if version >= 3 { put_i16(buf, self.min_version) }
202        if version >= 3 { put_i16(buf, self.max_version) }
203        if flex {
204            let tagged = WriteTaggedFields::new();
205            tagged.write(buf, &self.unknown_tagged_fields);
206        }
207        Ok(())
208    }
209    fn encoded_len(&self, version: i16) -> usize {
210        let flex = version >= 3;
211        let mut n: usize = 0;
212        if version >= 3 { n += if flex { compact_string_len(&self.name) } else { string_len(&self.name) }; }
213        if version >= 3 { n += 2; }
214        if version >= 3 { n += 2; }
215        if flex {
216            let known_pairs: Vec<(u32, usize)> = Vec::new();
217            n += tagged_fields_len(&known_pairs, &self.unknown_tagged_fields);
218        }
219        n
220    }
221}
222
223impl<'de> Decode<'de> for SupportedFeatureKey {
224    fn decode<B: Buf>(buf: &mut B, version: i16) -> Result<Self, ProtocolError> {
225        let flex = version >= 3;
226        let mut out = Self::default();
227        if version >= 3 { out.name = if flex { get_compact_string_owned(buf)? } else { get_string_owned(buf)? }; }
228        if version >= 3 { out.min_version = get_i16(buf)?; }
229        if version >= 3 { out.max_version = get_i16(buf)?; }
230        if flex {
231            out.unknown_tagged_fields = read_tagged_fields(buf, |_tag, _payload| {
232                Ok(false)
233            })?;
234        }
235        Ok(out)
236    }
237}
238
239#[derive(Debug, Clone, PartialEq, Eq, Default)]
240pub struct FinalizedFeatureKey {
241    pub name: String,
242    pub max_version_level: i16,
243    pub min_version_level: i16,
244    pub unknown_tagged_fields: UnknownTaggedFields,
245}
246
247impl Encode for FinalizedFeatureKey {
248    fn encode<B: BufMut>(&self, buf: &mut B, version: i16) -> Result<(), ProtocolError> {
249        let flex = version >= 3;
250        if version >= 3 { if flex { put_compact_string(buf, &self.name) } else { put_string(buf, &self.name) } }
251        if version >= 3 { put_i16(buf, self.max_version_level) }
252        if version >= 3 { put_i16(buf, self.min_version_level) }
253        if flex {
254            let tagged = WriteTaggedFields::new();
255            tagged.write(buf, &self.unknown_tagged_fields);
256        }
257        Ok(())
258    }
259    fn encoded_len(&self, version: i16) -> usize {
260        let flex = version >= 3;
261        let mut n: usize = 0;
262        if version >= 3 { n += if flex { compact_string_len(&self.name) } else { string_len(&self.name) }; }
263        if version >= 3 { n += 2; }
264        if version >= 3 { n += 2; }
265        if flex {
266            let known_pairs: Vec<(u32, usize)> = Vec::new();
267            n += tagged_fields_len(&known_pairs, &self.unknown_tagged_fields);
268        }
269        n
270    }
271}
272
273impl<'de> Decode<'de> for FinalizedFeatureKey {
274    fn decode<B: Buf>(buf: &mut B, version: i16) -> Result<Self, ProtocolError> {
275        let flex = version >= 3;
276        let mut out = Self::default();
277        if version >= 3 { out.name = if flex { get_compact_string_owned(buf)? } else { get_string_owned(buf)? }; }
278        if version >= 3 { out.max_version_level = get_i16(buf)?; }
279        if version >= 3 { out.min_version_level = get_i16(buf)?; }
280        if flex {
281            out.unknown_tagged_fields = read_tagged_fields(buf, |_tag, _payload| {
282                Ok(false)
283            })?;
284        }
285        Ok(out)
286    }
287}
288
289/// Default JSON payload matching `Self::default()` for JVM oracle differential testing.
290/// Only includes fields valid for the given version.
291#[must_use]
292#[allow(unused_comparisons)]
293pub fn default_json(version: i16) -> ::serde_json::Value {
294    let mut obj = ::serde_json::Map::new();
295    obj.insert("errorCode".to_string(), ::serde_json::json!(0));
296    obj.insert("apiKeys".to_string(), ::serde_json::Value::Array(vec![]));
297    if version >= 1 {
298        obj.insert("throttleTimeMs".to_string(), ::serde_json::json!(0));
299    }
300    if version >= 3 {
301        obj.insert("supportedFeatures".to_string(), ::serde_json::Value::Array(vec![]));
302    }
303    if version >= 3 {
304        obj.insert("finalizedFeaturesEpoch".to_string(), ::serde_json::json!(-1));
305    }
306    if version >= 3 {
307        obj.insert("finalizedFeatures".to_string(), ::serde_json::Value::Array(vec![]));
308    }
309    if version >= 3 {
310        obj.insert("zkMigrationReady".to_string(), ::serde_json::Value::Bool(false));
311    }
312    ::serde_json::Value::Object(obj)
313}