kafka_protocol/messages/
describe_delegation_token_request.rs1#![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 DescribeDelegationTokenOwner {
24 pub principal_type: StrBytes,
28
29 pub principal_name: StrBytes,
33
34 pub unknown_tagged_fields: BTreeMap<i32, Bytes>,
36}
37
38impl DescribeDelegationTokenOwner {
39 pub fn with_principal_type(mut self, value: StrBytes) -> Self {
45 self.principal_type = value;
46 self
47 }
48 pub fn with_principal_name(mut self, value: StrBytes) -> Self {
54 self.principal_name = 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 DescribeDelegationTokenOwner {
71 fn encode<B: ByteBufMut>(&self, buf: &mut B, version: i16) -> Result<()> {
72 if version < 0 || version > 3 {
73 bail!("specified version not supported by this message type");
74 }
75 if version >= 2 {
76 types::CompactString.encode(buf, &self.principal_type)?;
77 } else {
78 types::String.encode(buf, &self.principal_type)?;
79 }
80 if version >= 2 {
81 types::CompactString.encode(buf, &self.principal_name)?;
82 } else {
83 types::String.encode(buf, &self.principal_name)?;
84 }
85 if version >= 2 {
86 let num_tagged_fields = self.unknown_tagged_fields.len();
87 if num_tagged_fields > std::u32::MAX as usize {
88 bail!(
89 "Too many tagged fields to encode ({} fields)",
90 num_tagged_fields
91 );
92 }
93 types::UnsignedVarInt.encode(buf, num_tagged_fields as u32)?;
94
95 write_unknown_tagged_fields(buf, 0.., &self.unknown_tagged_fields)?;
96 }
97 Ok(())
98 }
99 fn compute_size(&self, version: i16) -> Result<usize> {
100 let mut total_size = 0;
101 if version >= 2 {
102 total_size += types::CompactString.compute_size(&self.principal_type)?;
103 } else {
104 total_size += types::String.compute_size(&self.principal_type)?;
105 }
106 if version >= 2 {
107 total_size += types::CompactString.compute_size(&self.principal_name)?;
108 } else {
109 total_size += types::String.compute_size(&self.principal_name)?;
110 }
111 if version >= 2 {
112 let num_tagged_fields = self.unknown_tagged_fields.len();
113 if num_tagged_fields > std::u32::MAX as usize {
114 bail!(
115 "Too many tagged fields to encode ({} fields)",
116 num_tagged_fields
117 );
118 }
119 total_size += types::UnsignedVarInt.compute_size(num_tagged_fields as u32)?;
120
121 total_size += compute_unknown_tagged_fields_size(&self.unknown_tagged_fields)?;
122 }
123 Ok(total_size)
124 }
125}
126
127#[cfg(feature = "broker")]
128impl Decodable for DescribeDelegationTokenOwner {
129 fn decode<B: ByteBuf>(buf: &mut B, version: i16) -> Result<Self> {
130 if version < 0 || version > 3 {
131 bail!("specified version not supported by this message type");
132 }
133 let principal_type = if version >= 2 {
134 types::CompactString.decode(buf)?
135 } else {
136 types::String.decode(buf)?
137 };
138 let principal_name = if version >= 2 {
139 types::CompactString.decode(buf)?
140 } else {
141 types::String.decode(buf)?
142 };
143 let mut unknown_tagged_fields = BTreeMap::new();
144 if version >= 2 {
145 let num_tagged_fields = types::UnsignedVarInt.decode(buf)?;
146 for _ in 0..num_tagged_fields {
147 let tag: u32 = types::UnsignedVarInt.decode(buf)?;
148 let size: u32 = types::UnsignedVarInt.decode(buf)?;
149 let unknown_value = buf.try_get_bytes(size as usize)?;
150 unknown_tagged_fields.insert(tag as i32, unknown_value);
151 }
152 }
153 Ok(Self {
154 principal_type,
155 principal_name,
156 unknown_tagged_fields,
157 })
158 }
159}
160
161impl Default for DescribeDelegationTokenOwner {
162 fn default() -> Self {
163 Self {
164 principal_type: Default::default(),
165 principal_name: Default::default(),
166 unknown_tagged_fields: BTreeMap::new(),
167 }
168 }
169}
170
171impl Message for DescribeDelegationTokenOwner {
172 const VERSIONS: VersionRange = VersionRange { min: 0, max: 3 };
173 const DEPRECATED_VERSIONS: Option<VersionRange> = Some(VersionRange { min: 0, max: 0 });
174}
175
176#[non_exhaustive]
178#[derive(Debug, Clone, PartialEq)]
179pub struct DescribeDelegationTokenRequest {
180 pub owners: Option<Vec<DescribeDelegationTokenOwner>>,
184
185 pub unknown_tagged_fields: BTreeMap<i32, Bytes>,
187}
188
189impl DescribeDelegationTokenRequest {
190 pub fn with_owners(mut self, value: Option<Vec<DescribeDelegationTokenOwner>>) -> Self {
196 self.owners = value;
197 self
198 }
199 pub fn with_unknown_tagged_fields(mut self, value: BTreeMap<i32, Bytes>) -> Self {
201 self.unknown_tagged_fields = value;
202 self
203 }
204 pub fn with_unknown_tagged_field(mut self, key: i32, value: Bytes) -> Self {
206 self.unknown_tagged_fields.insert(key, value);
207 self
208 }
209}
210
211#[cfg(feature = "client")]
212impl Encodable for DescribeDelegationTokenRequest {
213 fn encode<B: ByteBufMut>(&self, buf: &mut B, version: i16) -> Result<()> {
214 if version < 0 || version > 3 {
215 bail!("specified version not supported by this message type");
216 }
217 if version >= 2 {
218 types::CompactArray(types::Struct { version }).encode(buf, &self.owners)?;
219 } else {
220 types::Array(types::Struct { version }).encode(buf, &self.owners)?;
221 }
222 if version >= 2 {
223 let num_tagged_fields = self.unknown_tagged_fields.len();
224 if num_tagged_fields > std::u32::MAX as usize {
225 bail!(
226 "Too many tagged fields to encode ({} fields)",
227 num_tagged_fields
228 );
229 }
230 types::UnsignedVarInt.encode(buf, num_tagged_fields as u32)?;
231
232 write_unknown_tagged_fields(buf, 0.., &self.unknown_tagged_fields)?;
233 }
234 Ok(())
235 }
236 fn compute_size(&self, version: i16) -> Result<usize> {
237 let mut total_size = 0;
238 if version >= 2 {
239 total_size +=
240 types::CompactArray(types::Struct { version }).compute_size(&self.owners)?;
241 } else {
242 total_size += types::Array(types::Struct { version }).compute_size(&self.owners)?;
243 }
244 if version >= 2 {
245 let num_tagged_fields = self.unknown_tagged_fields.len();
246 if num_tagged_fields > std::u32::MAX as usize {
247 bail!(
248 "Too many tagged fields to encode ({} fields)",
249 num_tagged_fields
250 );
251 }
252 total_size += types::UnsignedVarInt.compute_size(num_tagged_fields as u32)?;
253
254 total_size += compute_unknown_tagged_fields_size(&self.unknown_tagged_fields)?;
255 }
256 Ok(total_size)
257 }
258}
259
260#[cfg(feature = "broker")]
261impl Decodable for DescribeDelegationTokenRequest {
262 fn decode<B: ByteBuf>(buf: &mut B, version: i16) -> Result<Self> {
263 if version < 0 || version > 3 {
264 bail!("specified version not supported by this message type");
265 }
266 let owners = if version >= 2 {
267 types::CompactArray(types::Struct { version }).decode(buf)?
268 } else {
269 types::Array(types::Struct { version }).decode(buf)?
270 };
271 let mut unknown_tagged_fields = BTreeMap::new();
272 if version >= 2 {
273 let num_tagged_fields = types::UnsignedVarInt.decode(buf)?;
274 for _ in 0..num_tagged_fields {
275 let tag: u32 = types::UnsignedVarInt.decode(buf)?;
276 let size: u32 = types::UnsignedVarInt.decode(buf)?;
277 let unknown_value = buf.try_get_bytes(size as usize)?;
278 unknown_tagged_fields.insert(tag as i32, unknown_value);
279 }
280 }
281 Ok(Self {
282 owners,
283 unknown_tagged_fields,
284 })
285 }
286}
287
288impl Default for DescribeDelegationTokenRequest {
289 fn default() -> Self {
290 Self {
291 owners: Some(Default::default()),
292 unknown_tagged_fields: BTreeMap::new(),
293 }
294 }
295}
296
297impl Message for DescribeDelegationTokenRequest {
298 const VERSIONS: VersionRange = VersionRange { min: 0, max: 3 };
299 const DEPRECATED_VERSIONS: Option<VersionRange> = Some(VersionRange { min: 0, max: 0 });
300}
301
302impl HeaderVersion for DescribeDelegationTokenRequest {
303 fn header_version(version: i16) -> i16 {
304 if version >= 2 {
305 2
306 } else {
307 1
308 }
309 }
310}