Skip to main content

krabka_protocol/opt/rustwide/workdir/generated/
UpdateRaftVoterResponse.owned.rs

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