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