1#![allow(unused)]
6
7use std::borrow::Borrow;
8use std::collections::BTreeMap;
9
10use anyhow::{bail, Result};
11use bytes::Bytes;
12use uuid::Uuid;
13
14use crate::protocol::{
15 buf::{ByteBuf, ByteBufMut},
16 compute_unknown_tagged_fields_size, types, write_unknown_tagged_fields, Decodable, Decoder,
17 Encodable, Encoder, HeaderVersion, Message, StrBytes, VersionRange,
18};
19
20#[non_exhaustive]
22#[derive(Debug, Clone, PartialEq)]
23pub struct AlterClientQuotasRequest {
24 pub entries: Vec<EntryData>,
28
29 pub validate_only: bool,
33
34 pub unknown_tagged_fields: BTreeMap<i32, Bytes>,
36}
37
38impl AlterClientQuotasRequest {
39 pub fn with_entries(mut self, value: Vec<EntryData>) -> Self {
45 self.entries = value;
46 self
47 }
48 pub fn with_validate_only(mut self, value: bool) -> Self {
54 self.validate_only = value;
55 self
56 }
57 pub fn with_unknown_tagged_fields(mut self, value: BTreeMap<i32, Bytes>) -> Self {
59 self.unknown_tagged_fields = value;
60 self
61 }
62 pub fn with_unknown_tagged_field(mut self, key: i32, value: Bytes) -> Self {
64 self.unknown_tagged_fields.insert(key, value);
65 self
66 }
67}
68
69#[cfg(feature = "client")]
70impl Encodable for AlterClientQuotasRequest {
71 fn encode<B: ByteBufMut>(&self, buf: &mut B, version: i16) -> Result<()> {
72 if version >= 1 {
73 types::CompactArray(types::Struct { version }).encode(buf, &self.entries)?;
74 } else {
75 types::Array(types::Struct { version }).encode(buf, &self.entries)?;
76 }
77 types::Boolean.encode(buf, &self.validate_only)?;
78 if version >= 1 {
79 let num_tagged_fields = self.unknown_tagged_fields.len();
80 if num_tagged_fields > std::u32::MAX as usize {
81 bail!(
82 "Too many tagged fields to encode ({} fields)",
83 num_tagged_fields
84 );
85 }
86 types::UnsignedVarInt.encode(buf, num_tagged_fields as u32)?;
87
88 write_unknown_tagged_fields(buf, 0.., &self.unknown_tagged_fields)?;
89 }
90 Ok(())
91 }
92 fn compute_size(&self, version: i16) -> Result<usize> {
93 let mut total_size = 0;
94 if version >= 1 {
95 total_size +=
96 types::CompactArray(types::Struct { version }).compute_size(&self.entries)?;
97 } else {
98 total_size += types::Array(types::Struct { version }).compute_size(&self.entries)?;
99 }
100 total_size += types::Boolean.compute_size(&self.validate_only)?;
101 if version >= 1 {
102 let num_tagged_fields = self.unknown_tagged_fields.len();
103 if num_tagged_fields > std::u32::MAX as usize {
104 bail!(
105 "Too many tagged fields to encode ({} fields)",
106 num_tagged_fields
107 );
108 }
109 total_size += types::UnsignedVarInt.compute_size(num_tagged_fields as u32)?;
110
111 total_size += compute_unknown_tagged_fields_size(&self.unknown_tagged_fields)?;
112 }
113 Ok(total_size)
114 }
115}
116
117#[cfg(feature = "broker")]
118impl Decodable for AlterClientQuotasRequest {
119 fn decode<B: ByteBuf>(buf: &mut B, version: i16) -> Result<Self> {
120 let entries = if version >= 1 {
121 types::CompactArray(types::Struct { version }).decode(buf)?
122 } else {
123 types::Array(types::Struct { version }).decode(buf)?
124 };
125 let validate_only = types::Boolean.decode(buf)?;
126 let mut unknown_tagged_fields = BTreeMap::new();
127 if version >= 1 {
128 let num_tagged_fields = types::UnsignedVarInt.decode(buf)?;
129 for _ in 0..num_tagged_fields {
130 let tag: u32 = types::UnsignedVarInt.decode(buf)?;
131 let size: u32 = types::UnsignedVarInt.decode(buf)?;
132 let unknown_value = buf.try_get_bytes(size as usize)?;
133 unknown_tagged_fields.insert(tag as i32, unknown_value);
134 }
135 }
136 Ok(Self {
137 entries,
138 validate_only,
139 unknown_tagged_fields,
140 })
141 }
142}
143
144impl Default for AlterClientQuotasRequest {
145 fn default() -> Self {
146 Self {
147 entries: Default::default(),
148 validate_only: false,
149 unknown_tagged_fields: BTreeMap::new(),
150 }
151 }
152}
153
154impl Message for AlterClientQuotasRequest {
155 const VERSIONS: VersionRange = VersionRange { min: 0, max: 1 };
156 const DEPRECATED_VERSIONS: Option<VersionRange> = None;
157}
158
159#[non_exhaustive]
161#[derive(Debug, Clone, PartialEq)]
162pub struct EntityData {
163 pub entity_type: StrBytes,
167
168 pub entity_name: Option<StrBytes>,
172
173 pub unknown_tagged_fields: BTreeMap<i32, Bytes>,
175}
176
177impl EntityData {
178 pub fn with_entity_type(mut self, value: StrBytes) -> Self {
184 self.entity_type = value;
185 self
186 }
187 pub fn with_entity_name(mut self, value: Option<StrBytes>) -> Self {
193 self.entity_name = value;
194 self
195 }
196 pub fn with_unknown_tagged_fields(mut self, value: BTreeMap<i32, Bytes>) -> Self {
198 self.unknown_tagged_fields = value;
199 self
200 }
201 pub fn with_unknown_tagged_field(mut self, key: i32, value: Bytes) -> Self {
203 self.unknown_tagged_fields.insert(key, value);
204 self
205 }
206}
207
208#[cfg(feature = "client")]
209impl Encodable for EntityData {
210 fn encode<B: ByteBufMut>(&self, buf: &mut B, version: i16) -> Result<()> {
211 if version >= 1 {
212 types::CompactString.encode(buf, &self.entity_type)?;
213 } else {
214 types::String.encode(buf, &self.entity_type)?;
215 }
216 if version >= 1 {
217 types::CompactString.encode(buf, &self.entity_name)?;
218 } else {
219 types::String.encode(buf, &self.entity_name)?;
220 }
221 if version >= 1 {
222 let num_tagged_fields = self.unknown_tagged_fields.len();
223 if num_tagged_fields > std::u32::MAX as usize {
224 bail!(
225 "Too many tagged fields to encode ({} fields)",
226 num_tagged_fields
227 );
228 }
229 types::UnsignedVarInt.encode(buf, num_tagged_fields as u32)?;
230
231 write_unknown_tagged_fields(buf, 0.., &self.unknown_tagged_fields)?;
232 }
233 Ok(())
234 }
235 fn compute_size(&self, version: i16) -> Result<usize> {
236 let mut total_size = 0;
237 if version >= 1 {
238 total_size += types::CompactString.compute_size(&self.entity_type)?;
239 } else {
240 total_size += types::String.compute_size(&self.entity_type)?;
241 }
242 if version >= 1 {
243 total_size += types::CompactString.compute_size(&self.entity_name)?;
244 } else {
245 total_size += types::String.compute_size(&self.entity_name)?;
246 }
247 if version >= 1 {
248 let num_tagged_fields = self.unknown_tagged_fields.len();
249 if num_tagged_fields > std::u32::MAX as usize {
250 bail!(
251 "Too many tagged fields to encode ({} fields)",
252 num_tagged_fields
253 );
254 }
255 total_size += types::UnsignedVarInt.compute_size(num_tagged_fields as u32)?;
256
257 total_size += compute_unknown_tagged_fields_size(&self.unknown_tagged_fields)?;
258 }
259 Ok(total_size)
260 }
261}
262
263#[cfg(feature = "broker")]
264impl Decodable for EntityData {
265 fn decode<B: ByteBuf>(buf: &mut B, version: i16) -> Result<Self> {
266 let entity_type = if version >= 1 {
267 types::CompactString.decode(buf)?
268 } else {
269 types::String.decode(buf)?
270 };
271 let entity_name = if version >= 1 {
272 types::CompactString.decode(buf)?
273 } else {
274 types::String.decode(buf)?
275 };
276 let mut unknown_tagged_fields = BTreeMap::new();
277 if version >= 1 {
278 let num_tagged_fields = types::UnsignedVarInt.decode(buf)?;
279 for _ in 0..num_tagged_fields {
280 let tag: u32 = types::UnsignedVarInt.decode(buf)?;
281 let size: u32 = types::UnsignedVarInt.decode(buf)?;
282 let unknown_value = buf.try_get_bytes(size as usize)?;
283 unknown_tagged_fields.insert(tag as i32, unknown_value);
284 }
285 }
286 Ok(Self {
287 entity_type,
288 entity_name,
289 unknown_tagged_fields,
290 })
291 }
292}
293
294impl Default for EntityData {
295 fn default() -> Self {
296 Self {
297 entity_type: Default::default(),
298 entity_name: Some(Default::default()),
299 unknown_tagged_fields: BTreeMap::new(),
300 }
301 }
302}
303
304impl Message for EntityData {
305 const VERSIONS: VersionRange = VersionRange { min: 0, max: 1 };
306 const DEPRECATED_VERSIONS: Option<VersionRange> = None;
307}
308
309#[non_exhaustive]
311#[derive(Debug, Clone, PartialEq)]
312pub struct EntryData {
313 pub entity: Vec<EntityData>,
317
318 pub ops: Vec<OpData>,
322
323 pub unknown_tagged_fields: BTreeMap<i32, Bytes>,
325}
326
327impl EntryData {
328 pub fn with_entity(mut self, value: Vec<EntityData>) -> Self {
334 self.entity = value;
335 self
336 }
337 pub fn with_ops(mut self, value: Vec<OpData>) -> Self {
343 self.ops = value;
344 self
345 }
346 pub fn with_unknown_tagged_fields(mut self, value: BTreeMap<i32, Bytes>) -> Self {
348 self.unknown_tagged_fields = value;
349 self
350 }
351 pub fn with_unknown_tagged_field(mut self, key: i32, value: Bytes) -> Self {
353 self.unknown_tagged_fields.insert(key, value);
354 self
355 }
356}
357
358#[cfg(feature = "client")]
359impl Encodable for EntryData {
360 fn encode<B: ByteBufMut>(&self, buf: &mut B, version: i16) -> Result<()> {
361 if version >= 1 {
362 types::CompactArray(types::Struct { version }).encode(buf, &self.entity)?;
363 } else {
364 types::Array(types::Struct { version }).encode(buf, &self.entity)?;
365 }
366 if version >= 1 {
367 types::CompactArray(types::Struct { version }).encode(buf, &self.ops)?;
368 } else {
369 types::Array(types::Struct { version }).encode(buf, &self.ops)?;
370 }
371 if version >= 1 {
372 let num_tagged_fields = self.unknown_tagged_fields.len();
373 if num_tagged_fields > std::u32::MAX as usize {
374 bail!(
375 "Too many tagged fields to encode ({} fields)",
376 num_tagged_fields
377 );
378 }
379 types::UnsignedVarInt.encode(buf, num_tagged_fields as u32)?;
380
381 write_unknown_tagged_fields(buf, 0.., &self.unknown_tagged_fields)?;
382 }
383 Ok(())
384 }
385 fn compute_size(&self, version: i16) -> Result<usize> {
386 let mut total_size = 0;
387 if version >= 1 {
388 total_size +=
389 types::CompactArray(types::Struct { version }).compute_size(&self.entity)?;
390 } else {
391 total_size += types::Array(types::Struct { version }).compute_size(&self.entity)?;
392 }
393 if version >= 1 {
394 total_size += types::CompactArray(types::Struct { version }).compute_size(&self.ops)?;
395 } else {
396 total_size += types::Array(types::Struct { version }).compute_size(&self.ops)?;
397 }
398 if version >= 1 {
399 let num_tagged_fields = self.unknown_tagged_fields.len();
400 if num_tagged_fields > std::u32::MAX as usize {
401 bail!(
402 "Too many tagged fields to encode ({} fields)",
403 num_tagged_fields
404 );
405 }
406 total_size += types::UnsignedVarInt.compute_size(num_tagged_fields as u32)?;
407
408 total_size += compute_unknown_tagged_fields_size(&self.unknown_tagged_fields)?;
409 }
410 Ok(total_size)
411 }
412}
413
414#[cfg(feature = "broker")]
415impl Decodable for EntryData {
416 fn decode<B: ByteBuf>(buf: &mut B, version: i16) -> Result<Self> {
417 let entity = if version >= 1 {
418 types::CompactArray(types::Struct { version }).decode(buf)?
419 } else {
420 types::Array(types::Struct { version }).decode(buf)?
421 };
422 let ops = if version >= 1 {
423 types::CompactArray(types::Struct { version }).decode(buf)?
424 } else {
425 types::Array(types::Struct { version }).decode(buf)?
426 };
427 let mut unknown_tagged_fields = BTreeMap::new();
428 if version >= 1 {
429 let num_tagged_fields = types::UnsignedVarInt.decode(buf)?;
430 for _ in 0..num_tagged_fields {
431 let tag: u32 = types::UnsignedVarInt.decode(buf)?;
432 let size: u32 = types::UnsignedVarInt.decode(buf)?;
433 let unknown_value = buf.try_get_bytes(size as usize)?;
434 unknown_tagged_fields.insert(tag as i32, unknown_value);
435 }
436 }
437 Ok(Self {
438 entity,
439 ops,
440 unknown_tagged_fields,
441 })
442 }
443}
444
445impl Default for EntryData {
446 fn default() -> Self {
447 Self {
448 entity: Default::default(),
449 ops: Default::default(),
450 unknown_tagged_fields: BTreeMap::new(),
451 }
452 }
453}
454
455impl Message for EntryData {
456 const VERSIONS: VersionRange = VersionRange { min: 0, max: 1 };
457 const DEPRECATED_VERSIONS: Option<VersionRange> = None;
458}
459
460#[non_exhaustive]
462#[derive(Debug, Clone, PartialEq)]
463pub struct OpData {
464 pub key: StrBytes,
468
469 pub value: f64,
473
474 pub remove: bool,
478
479 pub unknown_tagged_fields: BTreeMap<i32, Bytes>,
481}
482
483impl OpData {
484 pub fn with_key(mut self, value: StrBytes) -> Self {
490 self.key = value;
491 self
492 }
493 pub fn with_value(mut self, value: f64) -> Self {
499 self.value = value;
500 self
501 }
502 pub fn with_remove(mut self, value: bool) -> Self {
508 self.remove = value;
509 self
510 }
511 pub fn with_unknown_tagged_fields(mut self, value: BTreeMap<i32, Bytes>) -> Self {
513 self.unknown_tagged_fields = value;
514 self
515 }
516 pub fn with_unknown_tagged_field(mut self, key: i32, value: Bytes) -> Self {
518 self.unknown_tagged_fields.insert(key, value);
519 self
520 }
521}
522
523#[cfg(feature = "client")]
524impl Encodable for OpData {
525 fn encode<B: ByteBufMut>(&self, buf: &mut B, version: i16) -> Result<()> {
526 if version >= 1 {
527 types::CompactString.encode(buf, &self.key)?;
528 } else {
529 types::String.encode(buf, &self.key)?;
530 }
531 types::Float64.encode(buf, &self.value)?;
532 types::Boolean.encode(buf, &self.remove)?;
533 if version >= 1 {
534 let num_tagged_fields = self.unknown_tagged_fields.len();
535 if num_tagged_fields > std::u32::MAX as usize {
536 bail!(
537 "Too many tagged fields to encode ({} fields)",
538 num_tagged_fields
539 );
540 }
541 types::UnsignedVarInt.encode(buf, num_tagged_fields as u32)?;
542
543 write_unknown_tagged_fields(buf, 0.., &self.unknown_tagged_fields)?;
544 }
545 Ok(())
546 }
547 fn compute_size(&self, version: i16) -> Result<usize> {
548 let mut total_size = 0;
549 if version >= 1 {
550 total_size += types::CompactString.compute_size(&self.key)?;
551 } else {
552 total_size += types::String.compute_size(&self.key)?;
553 }
554 total_size += types::Float64.compute_size(&self.value)?;
555 total_size += types::Boolean.compute_size(&self.remove)?;
556 if version >= 1 {
557 let num_tagged_fields = self.unknown_tagged_fields.len();
558 if num_tagged_fields > std::u32::MAX as usize {
559 bail!(
560 "Too many tagged fields to encode ({} fields)",
561 num_tagged_fields
562 );
563 }
564 total_size += types::UnsignedVarInt.compute_size(num_tagged_fields as u32)?;
565
566 total_size += compute_unknown_tagged_fields_size(&self.unknown_tagged_fields)?;
567 }
568 Ok(total_size)
569 }
570}
571
572#[cfg(feature = "broker")]
573impl Decodable for OpData {
574 fn decode<B: ByteBuf>(buf: &mut B, version: i16) -> Result<Self> {
575 let key = if version >= 1 {
576 types::CompactString.decode(buf)?
577 } else {
578 types::String.decode(buf)?
579 };
580 let value = types::Float64.decode(buf)?;
581 let remove = types::Boolean.decode(buf)?;
582 let mut unknown_tagged_fields = BTreeMap::new();
583 if version >= 1 {
584 let num_tagged_fields = types::UnsignedVarInt.decode(buf)?;
585 for _ in 0..num_tagged_fields {
586 let tag: u32 = types::UnsignedVarInt.decode(buf)?;
587 let size: u32 = types::UnsignedVarInt.decode(buf)?;
588 let unknown_value = buf.try_get_bytes(size as usize)?;
589 unknown_tagged_fields.insert(tag as i32, unknown_value);
590 }
591 }
592 Ok(Self {
593 key,
594 value,
595 remove,
596 unknown_tagged_fields,
597 })
598 }
599}
600
601impl Default for OpData {
602 fn default() -> Self {
603 Self {
604 key: Default::default(),
605 value: 0.0,
606 remove: false,
607 unknown_tagged_fields: BTreeMap::new(),
608 }
609 }
610}
611
612impl Message for OpData {
613 const VERSIONS: VersionRange = VersionRange { min: 0, max: 1 };
614 const DEPRECATED_VERSIONS: Option<VersionRange> = None;
615}
616
617impl HeaderVersion for AlterClientQuotasRequest {
618 fn header_version(version: i16) -> i16 {
619 if version >= 1 {
620 2
621 } else {
622 1
623 }
624 }
625}