krabka_protocol/opt/rustwide/workdir/generated/
SaslHandshakeResponse.borrowed.rs1use bytes::BufMut;
3
4use crate::{
5 DecodeBorrow, Encode, ProtocolError, UnknownTaggedFields,
6 owned::sasl_handshake_response,
7 primitives::{
8 array::{array_len_prefix_len, get_array_len, put_array_len},
9 fixed::{get_i16, put_i16},
10 string_bytes::{compact_string_len, put_compact_string, put_string, string_len},
11 string_bytes_borrowed::{get_compact_string_borrowed, get_string_borrowed},
12 },
13};
14pub const API_KEY: i16 = 17;
15pub const MIN_VERSION: i16 = 0;
16pub const MAX_VERSION: i16 = 1;
17pub const FLEXIBLE_MIN: i16 = 32767;
18#[inline]
19#[must_use]
20pub fn is_flexible(version: i16) -> bool {
21 version == FLEXIBLE_MIN
22}
23#[derive(Debug, Clone, PartialEq, Eq, Default)]
24pub struct SaslHandshakeResponse<'a> {
25 pub error_code: i16,
26 pub mechanisms: Vec<&'a str>,
27 pub unknown_tagged_fields: UnknownTaggedFields,
28}
29impl SaslHandshakeResponse<'_> {
30 #[must_use]
31 pub fn to_owned(&self) -> sasl_handshake_response::SaslHandshakeResponse {
32 sasl_handshake_response::SaslHandshakeResponse {
33 error_code: (self.error_code),
34 mechanisms: (self.mechanisms).iter().map(|&s| s.to_owned()).collect(),
35 unknown_tagged_fields: self.unknown_tagged_fields.clone(),
36 }
37 }
38}
39impl Encode for SaslHandshakeResponse<'_> {
40 fn encode<B: BufMut>(&self, buf: &mut B, version: i16) -> Result<(), ProtocolError> {
41 if !(MIN_VERSION..=MAX_VERSION).contains(&version) {
42 return Err(ProtocolError::UnsupportedVersion {
43 api_key: API_KEY,
44 version,
45 });
46 }
47 let flex = is_flexible(version);
48 if version >= 0 {
49 put_i16(buf, self.error_code);
50 }
51 if version >= 0 {
52 {
53 put_array_len(buf, (self.mechanisms).len(), flex)?;
54 for it in &self.mechanisms {
55 if flex {
56 put_compact_string(buf, it)?;
57 } else {
58 put_string(buf, it)?;
59 }
60 }
61 }
62 }
63 Ok(())
64 }
65 fn encoded_len(&self, version: i16) -> usize {
66 let flex = is_flexible(version);
67 let mut n: usize = 0;
68 if version >= 0 {
69 n += 2;
70 }
71 if version >= 0 {
72 n += {
73 let prefix = array_len_prefix_len((self.mechanisms).len(), flex);
74 let body: usize = (self.mechanisms)
75 .iter()
76 .map(|it| {
77 if flex {
78 compact_string_len(it)
79 } else {
80 string_len(it)
81 }
82 })
83 .sum();
84 prefix + body
85 };
86 }
87 n
88 }
89}
90impl<'de> DecodeBorrow<'de> for SaslHandshakeResponse<'de> {
91 fn decode_borrow(buf: &mut &'de [u8], version: i16) -> Result<Self, ProtocolError> {
92 if !(MIN_VERSION..=MAX_VERSION).contains(&version) {
93 return Err(ProtocolError::UnsupportedVersion {
94 api_key: API_KEY,
95 version,
96 });
97 }
98 let flex = is_flexible(version);
99 let mut out = Self::default();
100 if version >= 0 {
101 out.error_code = get_i16(buf)?;
102 }
103 if version >= 0 {
104 out.mechanisms = {
105 let n = get_array_len(buf, flex)?;
106 let mut v = Vec::with_capacity(n);
107 for _ in 0..n {
108 v.push(if flex {
109 get_compact_string_borrowed(buf)?
110 } else {
111 get_string_borrowed(buf)?
112 });
113 }
114 v
115 };
116 }
117 Ok(out)
118 }
119}
120#[cfg(test)]
121impl SaslHandshakeResponse<'_> {
122 #[must_use]
123 pub fn populated(version: i16) -> Self {
124 let mut m = Self::default();
125 if version >= 0 {
126 m.error_code = 1i16;
127 }
128 if version >= 0 {
129 m.mechanisms = vec!["x"];
130 }
131 m
132 }
133}