nautilus_binance/common/sbe/spot/
message_header_codec.rs1pub use decoder::MessageHeaderDecoder;
2pub use encoder::MessageHeaderEncoder;
3
4use super::*;
5
6pub const ENCODED_LENGTH: usize = 8;
7
8pub mod encoder {
9 use super::*;
10
11 #[derive(Debug, Default)]
12 pub struct MessageHeaderEncoder<P> {
13 parent: Option<P>,
14 offset: usize,
15 }
16
17 impl<'a, P> Writer<'a> for MessageHeaderEncoder<P>
18 where
19 P: Writer<'a> + Default,
20 {
21 #[inline]
22 fn get_buf_mut(&mut self) -> &mut WriteBuf<'a> {
23 if let Some(parent) = self.parent.as_mut() {
24 parent.get_buf_mut()
25 } else {
26 panic!("parent was None")
27 }
28 }
29 }
30
31 impl<'a, P> MessageHeaderEncoder<P>
32 where
33 P: Writer<'a> + Default,
34 {
35 pub fn wrap(mut self, parent: P, offset: usize) -> Self {
36 self.parent = Some(parent);
37 self.offset = offset;
38 self
39 }
40
41 #[inline]
42 pub fn parent(&mut self) -> SbeResult<P> {
43 self.parent.take().ok_or(SbeErr::ParentNotSet)
44 }
45
46 #[inline]
56 pub fn block_length(&mut self, value: u16) {
57 let offset = self.offset;
58 self.get_buf_mut().put_u16_at(offset, value);
59 }
60
61 #[inline]
71 pub fn template_id(&mut self, value: u16) {
72 let offset = self.offset + 2;
73 self.get_buf_mut().put_u16_at(offset, value);
74 }
75
76 #[inline]
86 pub fn schema_id(&mut self, value: u16) {
87 let offset = self.offset + 4;
88 self.get_buf_mut().put_u16_at(offset, value);
89 }
90
91 #[inline]
101 pub fn version(&mut self, value: u16) {
102 let offset = self.offset + 6;
103 self.get_buf_mut().put_u16_at(offset, value);
104 }
105 }
106} pub mod decoder {
109 use super::*;
110
111 #[derive(Debug, Default)]
112 pub struct MessageHeaderDecoder<P> {
113 parent: Option<P>,
114 offset: usize,
115 }
116
117 impl<'a, P> ActingVersion for MessageHeaderDecoder<P>
118 where
119 P: Reader<'a> + ActingVersion + Default,
120 {
121 #[inline]
122 fn acting_version(&self) -> u16 {
123 self.parent.as_ref().unwrap().acting_version()
124 }
125 }
126
127 impl<'a, P> Reader<'a> for MessageHeaderDecoder<P>
128 where
129 P: Reader<'a> + Default,
130 {
131 #[inline]
132 fn get_buf(&self) -> &ReadBuf<'a> {
133 self.parent.as_ref().expect("parent missing").get_buf()
134 }
135 }
136
137 impl<'a, P> MessageHeaderDecoder<P>
138 where
139 P: Reader<'a> + Default,
140 {
141 pub fn wrap(mut self, parent: P, offset: usize) -> Self {
142 self.parent = Some(parent);
143 self.offset = offset;
144 self
145 }
146
147 #[inline]
148 pub fn parent(&mut self) -> SbeResult<P> {
149 self.parent.take().ok_or(SbeErr::ParentNotSet)
150 }
151
152 #[inline]
154 pub fn block_length(&self) -> u16 {
155 self.get_buf().get_u16_at(self.offset)
156 }
157
158 #[inline]
160 pub fn template_id(&self) -> u16 {
161 self.get_buf().get_u16_at(self.offset + 2)
162 }
163
164 #[inline]
166 pub fn schema_id(&self) -> u16 {
167 self.get_buf().get_u16_at(self.offset + 4)
168 }
169
170 #[inline]
172 pub fn version(&self) -> u16 {
173 self.get_buf().get_u16_at(self.offset + 6)
174 }
175 }
176}