krabka_protocol/opt/rustwide/workdir/generated/
EnvelopeResponse.borrowed.rs1use bytes::{BufMut, Bytes};
3
4use crate::{
5 DecodeBorrow, Encode, ProtocolError, UnknownTaggedFields,
6 primitives::{
7 fixed::{get_i16, put_i16},
8 string_bytes::{put_compact_nullable_bytes, put_nullable_bytes},
9 string_bytes_borrowed::{get_compact_nullable_bytes_borrowed, get_nullable_bytes_borrowed},
10 },
11 tagged_fields::{WriteTaggedFields, read_tagged_fields, tagged_fields_len},
12};
13pub const API_KEY: i16 = 58;
14pub const MIN_VERSION: i16 = 0;
15pub const MAX_VERSION: i16 = 0;
16pub const FLEXIBLE_MIN: i16 = 0;
17#[inline]
18#[must_use]
19pub fn is_flexible(version: i16) -> bool {
20 version >= FLEXIBLE_MIN
21}
22#[derive(Debug, Clone, PartialEq, Eq, Default)]
23pub struct EnvelopeResponse<'a> {
24 pub response_data: Option<&'a [u8]>,
25 pub error_code: i16,
26 pub unknown_tagged_fields: UnknownTaggedFields,
27}
28impl EnvelopeResponse<'_> {
29 #[must_use]
33 pub fn to_owned(&self) -> crate::owned::envelope_response::EnvelopeResponse {
34 crate::owned::envelope_response::EnvelopeResponse {
35 response_data: (self.response_data).map(Bytes::copy_from_slice),
36 error_code: (self.error_code),
37 unknown_tagged_fields: self.unknown_tagged_fields.clone(),
38 }
39 }
40}
41impl Encode for EnvelopeResponse<'_> {
42 fn encode<B: BufMut>(&self, buf: &mut B, version: i16) -> Result<(), ProtocolError> {
43 if !(MIN_VERSION..=MAX_VERSION).contains(&version) {
44 return Err(ProtocolError::UnsupportedVersion {
45 api_key: API_KEY,
46 version,
47 });
48 }
49 let flex = is_flexible(version);
50 if version >= 0 {
51 if flex {
52 let () = put_compact_nullable_bytes(buf, self.response_data);
53 } else {
54 let () = put_nullable_bytes(buf, self.response_data);
55 }
56 }
57 if version >= 0 {
58 put_i16(buf, self.error_code);
59 }
60 if flex {
61 let tagged = WriteTaggedFields::new();
62 tagged.write(buf, &self.unknown_tagged_fields);
63 }
64 Ok(())
65 }
66 fn encoded_len(&self, version: i16) -> usize {
67 let flex = is_flexible(version);
68 let mut n: usize = 0;
69 if version >= 0 {
70 n += match self.response_data {
71 None => {
72 if flex {
73 1
74 } else {
75 4
76 }
77 }
78 Some(b) => {
79 if flex {
80 crate::primitives::varint::uvarint_len(u32::try_from(b.len() + 1).unwrap())
81 + b.len()
82 } else {
83 4 + b.len()
84 }
85 }
86 };
87 }
88 if version >= 0 {
89 n += 2;
90 }
91 if flex {
92 let known_pairs: Vec<(u32, usize)> = Vec::new();
93 n += tagged_fields_len(&known_pairs, &self.unknown_tagged_fields);
94 }
95 n
96 }
97}
98impl<'de> DecodeBorrow<'de> for EnvelopeResponse<'de> {
99 fn decode_borrow(buf: &mut &'de [u8], version: i16) -> Result<Self, ProtocolError> {
100 if !(MIN_VERSION..=MAX_VERSION).contains(&version) {
101 return Err(ProtocolError::UnsupportedVersion {
102 api_key: API_KEY,
103 version,
104 });
105 }
106 let flex = is_flexible(version);
107 let mut out = Self::default();
108 if version >= 0 {
109 out.response_data = if flex {
110 get_compact_nullable_bytes_borrowed(buf)?
111 } else {
112 get_nullable_bytes_borrowed(buf)?
113 };
114 }
115 if version >= 0 {
116 out.error_code = get_i16(buf)?;
117 }
118 if flex {
119 out.unknown_tagged_fields = read_tagged_fields(buf, |_tag, _payload| Ok(false))?;
120 }
121 Ok(out)
122 }
123}
124#[cfg(test)]
125impl EnvelopeResponse<'_> {
126 #[must_use]
127 pub fn populated(version: i16) -> Self {
128 let mut m = Self::default();
129 if version >= 0 {
130 m.response_data = Some(&b"x"[..]);
131 }
132 if version >= 0 {
133 m.error_code = 1i16;
134 }
135 m
136 }
137}