Skip to main content

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

1// AUTO-GENERATED by krabka-protocol-codegen against a9ce3221537b8653448750697915607dc7936cf3. Do not edit.
2use bytes::{BufMut, Bytes};
3
4use crate::{
5    DecodeBorrow, Encode, ProtocolError, UnknownTaggedFields,
6    primitives::{
7        string_bytes::{
8            put_bytes, put_compact_bytes, put_compact_nullable_bytes, put_nullable_bytes,
9        },
10        string_bytes_borrowed::{
11            get_bytes_borrowed, get_compact_bytes_borrowed, get_compact_nullable_bytes_borrowed,
12            get_nullable_bytes_borrowed,
13        },
14    },
15    tagged_fields::{WriteTaggedFields, read_tagged_fields, tagged_fields_len},
16};
17pub const API_KEY: i16 = 58;
18pub const MIN_VERSION: i16 = 0;
19pub const MAX_VERSION: i16 = 0;
20pub const LATEST_STABLE_VERSION: i16 = 0;
21pub const FLEXIBLE_MIN: i16 = 0;
22#[inline]
23#[must_use]
24pub fn is_flexible(version: i16) -> bool {
25    version >= FLEXIBLE_MIN
26}
27#[derive(Debug, Clone, PartialEq, Eq)]
28pub struct EnvelopeRequest<'a> {
29    pub request_data: &'a [u8],
30    pub request_principal: Option<&'a [u8]>,
31    pub client_host_address: &'a [u8],
32    pub unknown_tagged_fields: UnknownTaggedFields,
33}
34impl Default for EnvelopeRequest<'_> {
35    fn default() -> Self {
36        Self {
37            request_data: &[],
38            request_principal: Some(&[]),
39            client_host_address: &[],
40            unknown_tagged_fields: UnknownTaggedFields::default(),
41        }
42    }
43}
44impl EnvelopeRequest<'_> {
45    /// # Panics
46    ///
47    /// Panics if a records field contains an invalid encoded record batch.
48    #[must_use]
49    pub fn to_owned(&self) -> crate::owned::envelope_request::EnvelopeRequest {
50        crate::owned::envelope_request::EnvelopeRequest {
51            request_data: Bytes::copy_from_slice(self.request_data),
52            request_principal: (self.request_principal).map(Bytes::copy_from_slice),
53            client_host_address: Bytes::copy_from_slice(self.client_host_address),
54            unknown_tagged_fields: self.unknown_tagged_fields.clone(),
55        }
56    }
57}
58impl Encode for EnvelopeRequest<'_> {
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                let () = put_compact_bytes(buf, self.request_data);
70            } else {
71                let () = put_bytes(buf, self.request_data);
72            }
73        }
74        if version >= 0 {
75            if flex {
76                let () = put_compact_nullable_bytes(buf, self.request_principal);
77            } else {
78                let () = put_nullable_bytes(buf, self.request_principal);
79            }
80        }
81        if version >= 0 {
82            if flex {
83                let () = put_compact_bytes(buf, self.client_host_address);
84            } else {
85                let () = put_bytes(buf, self.client_host_address);
86            }
87        }
88        if flex {
89            let tagged = WriteTaggedFields::new();
90            tagged.write(buf, &self.unknown_tagged_fields);
91        }
92        Ok(())
93    }
94    fn encoded_len(&self, version: i16) -> usize {
95        let flex = is_flexible(version);
96        let mut n: usize = 0;
97        if version >= 0 {
98            n += if flex {
99                crate::primitives::varint::uvarint_len(
100                    u32::try_from((self.request_data).len() + 1).unwrap(),
101                ) + (self.request_data).len()
102            } else {
103                4 + (self.request_data).len()
104            };
105        }
106        if version >= 0 {
107            n += match self.request_principal {
108                None => {
109                    if flex {
110                        1
111                    } else {
112                        4
113                    }
114                }
115                Some(b) => {
116                    if flex {
117                        crate::primitives::varint::uvarint_len(u32::try_from(b.len() + 1).unwrap())
118                            + b.len()
119                    } else {
120                        4 + b.len()
121                    }
122                }
123            };
124        }
125        if version >= 0 {
126            n += if flex {
127                crate::primitives::varint::uvarint_len(
128                    u32::try_from((self.client_host_address).len() + 1).unwrap(),
129                ) + (self.client_host_address).len()
130            } else {
131                4 + (self.client_host_address).len()
132            };
133        }
134        if flex {
135            let known_pairs: Vec<(u32, usize)> = Vec::new();
136            n += tagged_fields_len(&known_pairs, &self.unknown_tagged_fields);
137        }
138        n
139    }
140}
141impl<'de> DecodeBorrow<'de> for EnvelopeRequest<'de> {
142    fn decode_borrow(buf: &mut &'de [u8], version: i16) -> Result<Self, ProtocolError> {
143        if !(MIN_VERSION..=MAX_VERSION).contains(&version) {
144            return Err(ProtocolError::UnsupportedVersion {
145                api_key: API_KEY,
146                version,
147            });
148        }
149        let flex = is_flexible(version);
150        let mut out = Self::default();
151        if version >= 0 {
152            out.request_data = if flex {
153                get_compact_bytes_borrowed(buf)?
154            } else {
155                get_bytes_borrowed(buf)?
156            };
157        }
158        if version >= 0 {
159            out.request_principal = if flex {
160                get_compact_nullable_bytes_borrowed(buf)?
161            } else {
162                get_nullable_bytes_borrowed(buf)?
163            };
164        }
165        if version >= 0 {
166            out.client_host_address = if flex {
167                get_compact_bytes_borrowed(buf)?
168            } else {
169                get_bytes_borrowed(buf)?
170            };
171        }
172        if flex {
173            out.unknown_tagged_fields = read_tagged_fields(buf, |_tag, _payload| Ok(false))?;
174        }
175        Ok(out)
176    }
177}
178#[cfg(test)]
179impl EnvelopeRequest<'_> {
180    #[must_use]
181    pub fn populated(version: i16) -> Self {
182        let mut m = Self::default();
183        if version >= 0 {
184            m.request_data = &b"x"[..];
185        }
186        if version >= 0 {
187            m.request_principal = Some(&b"x"[..]);
188        }
189        if version >= 0 {
190            m.client_host_address = &b"x"[..];
191        }
192        m
193    }
194}