nautilus_binance/common/sbe/spot/
message_data_codec.rs1pub use decoder::MessageDataDecoder;
2pub use encoder::MessageDataEncoder;
3
4use super::*;
5
6pub mod encoder {
7 use super::*;
8
9 #[derive(Debug, Default)]
10 pub struct MessageDataEncoder<P> {
11 parent: Option<P>,
12 offset: usize,
13 }
14
15 impl<'a, P> Writer<'a> for MessageDataEncoder<P>
16 where
17 P: Writer<'a> + Default,
18 {
19 #[inline]
20 fn get_buf_mut(&mut self) -> &mut WriteBuf<'a> {
21 if let Some(parent) = self.parent.as_mut() {
22 parent.get_buf_mut()
23 } else {
24 panic!("parent was None")
25 }
26 }
27 }
28
29 impl<'a, P> MessageDataEncoder<P>
30 where
31 P: Writer<'a> + Default,
32 {
33 pub fn wrap(mut self, parent: P, offset: usize) -> Self {
34 self.parent = Some(parent);
35 self.offset = offset;
36 self
37 }
38
39 #[inline]
40 pub fn parent(&mut self) -> SbeResult<P> {
41 self.parent.take().ok_or(SbeErr::ParentNotSet)
42 }
43
44 #[inline]
54 pub fn length(&mut self, value: u32) {
55 let offset = self.offset;
56 self.get_buf_mut().put_u32_at(offset, value);
57 }
58
59 #[inline]
69 pub fn var_data(&mut self, value: u8) {
70 let offset = self.offset + 4;
71 self.get_buf_mut().put_u8_at(offset, value);
72 }
73 }
74} pub mod decoder {
77 use super::*;
78
79 #[derive(Debug, Default)]
80 pub struct MessageDataDecoder<P> {
81 parent: Option<P>,
82 offset: usize,
83 }
84
85 impl<'a, P> ActingVersion for MessageDataDecoder<P>
86 where
87 P: Reader<'a> + ActingVersion + Default,
88 {
89 #[inline]
90 fn acting_version(&self) -> u16 {
91 self.parent.as_ref().unwrap().acting_version()
92 }
93 }
94
95 impl<'a, P> Reader<'a> for MessageDataDecoder<P>
96 where
97 P: Reader<'a> + Default,
98 {
99 #[inline]
100 fn get_buf(&self) -> &ReadBuf<'a> {
101 self.parent.as_ref().expect("parent missing").get_buf()
102 }
103 }
104
105 impl<'a, P> MessageDataDecoder<P>
106 where
107 P: Reader<'a> + Default,
108 {
109 pub fn wrap(mut self, parent: P, offset: usize) -> Self {
110 self.parent = Some(parent);
111 self.offset = offset;
112 self
113 }
114
115 #[inline]
116 pub fn parent(&mut self) -> SbeResult<P> {
117 self.parent.take().ok_or(SbeErr::ParentNotSet)
118 }
119
120 #[inline]
122 pub fn length(&self) -> u32 {
123 self.get_buf().get_u32_at(self.offset)
124 }
125
126 #[inline]
128 pub fn var_data(&self) -> u8 {
129 self.get_buf().get_u8_at(self.offset + 4)
130 }
131 }
132}