Skip to main content

krabka_protocol/opt/rustwide/workdir/generated/
SaslHandshakeResponse.borrowed.rs

1// AUTO-GENERATED by krabka-protocol-codegen against a9ce3221537b8653448750697915607dc7936cf3. Do not edit.
2use 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}