nautilus_binance/common/sbe/spot/
message_header_codec.rs

1pub 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        /// primitive field 'blockLength'
47        /// - min value: 0
48        /// - max value: 65534
49        /// - null value: 0xffff_u16
50        /// - characterEncoding: null
51        /// - semanticType: null
52        /// - encodedOffset: 0
53        /// - encodedLength: 2
54        /// - version: 0
55        #[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        /// primitive field 'templateId'
62        /// - min value: 0
63        /// - max value: 65534
64        /// - null value: 0xffff_u16
65        /// - characterEncoding: null
66        /// - semanticType: null
67        /// - encodedOffset: 2
68        /// - encodedLength: 2
69        /// - version: 0
70        #[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        /// primitive field 'schemaId'
77        /// - min value: 0
78        /// - max value: 65534
79        /// - null value: 0xffff_u16
80        /// - characterEncoding: null
81        /// - semanticType: null
82        /// - encodedOffset: 4
83        /// - encodedLength: 2
84        /// - version: 0
85        #[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        /// primitive field 'version'
92        /// - min value: 0
93        /// - max value: 65534
94        /// - null value: 0xffff_u16
95        /// - characterEncoding: null
96        /// - semanticType: null
97        /// - encodedOffset: 6
98        /// - encodedLength: 2
99        /// - version: 0
100        #[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} // end encoder mod
107
108pub 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        /// primitive field - 'REQUIRED'
153        #[inline]
154        pub fn block_length(&self) -> u16 {
155            self.get_buf().get_u16_at(self.offset)
156        }
157
158        /// primitive field - 'REQUIRED'
159        #[inline]
160        pub fn template_id(&self) -> u16 {
161            self.get_buf().get_u16_at(self.offset + 2)
162        }
163
164        /// primitive field - 'REQUIRED'
165        #[inline]
166        pub fn schema_id(&self) -> u16 {
167            self.get_buf().get_u16_at(self.offset + 4)
168        }
169
170        /// primitive field - 'REQUIRED'
171        #[inline]
172        pub fn version(&self) -> u16 {
173            self.get_buf().get_u16_at(self.offset + 6)
174        }
175    }
176} // end decoder mod