Skip to main content

nautilus_binance/spot/sbe/generated/
ticker_symbol_full_response_codec.rs

1pub use decoder::TickerSymbolFullResponseDecoder;
2pub use encoder::TickerSymbolFullResponseEncoder;
3
4use super::*;
5pub use super::{SBE_SCHEMA_ID, SBE_SCHEMA_VERSION, SBE_SEMANTIC_VERSION};
6
7pub const SBE_BLOCK_LENGTH: u16 = 126;
8pub const SBE_TEMPLATE_ID: u16 = 213;
9
10pub mod encoder {
11    use message_header_codec::*;
12
13    use super::*;
14
15    #[derive(Debug, Default)]
16    pub struct TickerSymbolFullResponseEncoder<'a> {
17        buf: WriteBuf<'a>,
18        initial_offset: usize,
19        offset: usize,
20        limit: usize,
21    }
22
23    impl<'a> Writer<'a> for TickerSymbolFullResponseEncoder<'a> {
24        #[inline]
25        fn get_buf_mut(&mut self) -> &mut WriteBuf<'a> {
26            &mut self.buf
27        }
28    }
29
30    impl<'a> Encoder<'a> for TickerSymbolFullResponseEncoder<'a> {
31        #[inline]
32        fn get_limit(&self) -> usize {
33            self.limit
34        }
35
36        #[inline]
37        fn set_limit(&mut self, limit: usize) {
38            self.limit = limit;
39        }
40    }
41
42    impl<'a> TickerSymbolFullResponseEncoder<'a> {
43        pub fn wrap(mut self, buf: WriteBuf<'a>, offset: usize) -> Self {
44            let limit = offset + SBE_BLOCK_LENGTH as usize;
45            self.buf = buf;
46            self.initial_offset = offset;
47            self.offset = offset;
48            self.limit = limit;
49            self
50        }
51
52        #[inline]
53        pub fn encoded_length(&self) -> usize {
54            self.limit - self.offset
55        }
56
57        pub fn header(self, offset: usize) -> MessageHeaderEncoder<Self> {
58            let mut header = MessageHeaderEncoder::default().wrap(self, offset);
59            header.block_length(SBE_BLOCK_LENGTH);
60            header.template_id(SBE_TEMPLATE_ID);
61            header.schema_id(SBE_SCHEMA_ID);
62            header.version(SBE_SCHEMA_VERSION);
63            header
64        }
65
66        /// primitive field 'priceExponent'
67        /// - min value: -127
68        /// - max value: 127
69        /// - null value: -128_i8
70        /// - characterEncoding: null
71        /// - semanticType: null
72        /// - encodedOffset: 0
73        /// - encodedLength: 1
74        /// - version: 0
75        #[inline]
76        pub fn price_exponent(&mut self, value: i8) {
77            let offset = self.offset;
78            self.get_buf_mut().put_i8_at(offset, value);
79        }
80
81        /// primitive field 'qtyExponent'
82        /// - min value: -127
83        /// - max value: 127
84        /// - null value: -128_i8
85        /// - characterEncoding: null
86        /// - semanticType: null
87        /// - encodedOffset: 1
88        /// - encodedLength: 1
89        /// - version: 0
90        #[inline]
91        pub fn qty_exponent(&mut self, value: i8) {
92            let offset = self.offset + 1;
93            self.get_buf_mut().put_i8_at(offset, value);
94        }
95
96        /// primitive field 'priceChange'
97        /// - min value: -9223372036854775807
98        /// - max value: 9223372036854775807
99        /// - null value: -9223372036854775808_i64
100        /// - characterEncoding: null
101        /// - semanticType: null
102        /// - encodedOffset: 2
103        /// - encodedLength: 8
104        /// - version: 0
105        #[inline]
106        pub fn price_change(&mut self, value: i64) {
107            let offset = self.offset + 2;
108            self.get_buf_mut().put_i64_at(offset, value);
109        }
110
111        /// primitive field 'priceChangePercent'
112        /// - min value: -3.4028234663852886E38
113        /// - max value: 3.4028234663852886E38
114        /// - null value: f32::NAN
115        /// - characterEncoding: null
116        /// - semanticType: null
117        /// - encodedOffset: 10
118        /// - encodedLength: 4
119        /// - version: 0
120        #[inline]
121        pub fn price_change_percent(&mut self, value: f32) {
122            let offset = self.offset + 10;
123            self.get_buf_mut().put_f32_at(offset, value);
124        }
125
126        /// primitive field 'weightedAvgPrice'
127        /// - min value: -9223372036854775807
128        /// - max value: 9223372036854775807
129        /// - null value: -9223372036854775808_i64
130        /// - characterEncoding: null
131        /// - semanticType: null
132        /// - encodedOffset: 14
133        /// - encodedLength: 8
134        /// - version: 0
135        #[inline]
136        pub fn weighted_avg_price(&mut self, value: i64) {
137            let offset = self.offset + 14;
138            self.get_buf_mut().put_i64_at(offset, value);
139        }
140
141        /// primitive field 'openPrice'
142        /// - min value: -9223372036854775807
143        /// - max value: 9223372036854775807
144        /// - null value: -9223372036854775808_i64
145        /// - characterEncoding: null
146        /// - semanticType: null
147        /// - encodedOffset: 22
148        /// - encodedLength: 8
149        /// - version: 0
150        #[inline]
151        pub fn open_price(&mut self, value: i64) {
152            let offset = self.offset + 22;
153            self.get_buf_mut().put_i64_at(offset, value);
154        }
155
156        /// primitive field 'highPrice'
157        /// - min value: -9223372036854775807
158        /// - max value: 9223372036854775807
159        /// - null value: -9223372036854775808_i64
160        /// - characterEncoding: null
161        /// - semanticType: null
162        /// - encodedOffset: 30
163        /// - encodedLength: 8
164        /// - version: 0
165        #[inline]
166        pub fn high_price(&mut self, value: i64) {
167            let offset = self.offset + 30;
168            self.get_buf_mut().put_i64_at(offset, value);
169        }
170
171        /// primitive field 'lowPrice'
172        /// - min value: -9223372036854775807
173        /// - max value: 9223372036854775807
174        /// - null value: -9223372036854775808_i64
175        /// - characterEncoding: null
176        /// - semanticType: null
177        /// - encodedOffset: 38
178        /// - encodedLength: 8
179        /// - version: 0
180        #[inline]
181        pub fn low_price(&mut self, value: i64) {
182            let offset = self.offset + 38;
183            self.get_buf_mut().put_i64_at(offset, value);
184        }
185
186        /// primitive field 'lastPrice'
187        /// - min value: -9223372036854775807
188        /// - max value: 9223372036854775807
189        /// - null value: -9223372036854775808_i64
190        /// - characterEncoding: null
191        /// - semanticType: null
192        /// - encodedOffset: 46
193        /// - encodedLength: 8
194        /// - version: 0
195        #[inline]
196        pub fn last_price(&mut self, value: i64) {
197            let offset = self.offset + 46;
198            self.get_buf_mut().put_i64_at(offset, value);
199        }
200
201        #[inline]
202        pub fn volume_at(&mut self, index: usize, value: u8) {
203            let offset = self.offset + 54;
204            let buf = self.get_buf_mut();
205            buf.put_u8_at(offset + index, value);
206        }
207
208        /// primitive array field 'volume'
209        /// - min value: 0
210        /// - max value: 254
211        /// - null value: 0xff_u8
212        /// - characterEncoding: null
213        /// - semanticType: null
214        /// - encodedOffset: 54
215        /// - encodedLength: 16
216        /// - version: 0
217        #[inline]
218        pub fn volume(&mut self, value: &[u8]) {
219            debug_assert_eq!(16, value.len());
220            let offset = self.offset + 54;
221            let buf = self.get_buf_mut();
222            buf.put_slice_at(offset, value);
223        }
224
225        /// primitive array field 'volume' from an Iterator
226        /// - min value: 0
227        /// - max value: 254
228        /// - null value: 0xff_u8
229        /// - characterEncoding: null
230        /// - semanticType: null
231        /// - encodedOffset: 54
232        /// - encodedLength: 16
233        /// - version: 0
234        #[inline]
235        pub fn volume_from_iter(&mut self, iter: impl Iterator<Item = u8>) {
236            let offset = self.offset + 54;
237            let buf = self.get_buf_mut();
238            for (i, v) in iter.enumerate() {
239                buf.put_u8_at(offset + i, v);
240            }
241        }
242
243        /// primitive array field 'volume' with zero padding
244        /// - min value: 0
245        /// - max value: 254
246        /// - null value: 0xff_u8
247        /// - characterEncoding: null
248        /// - semanticType: null
249        /// - encodedOffset: 54
250        /// - encodedLength: 16
251        /// - version: 0
252        #[inline]
253        pub fn volume_zero_padded(&mut self, value: &[u8]) {
254            let iter = value
255                .iter()
256                .copied()
257                .chain(std::iter::repeat(0_u8))
258                .take(16);
259            self.volume_from_iter(iter);
260        }
261
262        #[inline]
263        pub fn quote_volume_at(&mut self, index: usize, value: u8) {
264            let offset = self.offset + 70;
265            let buf = self.get_buf_mut();
266            buf.put_u8_at(offset + index, value);
267        }
268
269        /// primitive array field 'quoteVolume'
270        /// - min value: 0
271        /// - max value: 254
272        /// - null value: 0xff_u8
273        /// - characterEncoding: null
274        /// - semanticType: null
275        /// - encodedOffset: 70
276        /// - encodedLength: 16
277        /// - version: 0
278        #[inline]
279        pub fn quote_volume(&mut self, value: &[u8]) {
280            debug_assert_eq!(16, value.len());
281            let offset = self.offset + 70;
282            let buf = self.get_buf_mut();
283            buf.put_slice_at(offset, value);
284        }
285
286        /// primitive array field 'quoteVolume' from an Iterator
287        /// - min value: 0
288        /// - max value: 254
289        /// - null value: 0xff_u8
290        /// - characterEncoding: null
291        /// - semanticType: null
292        /// - encodedOffset: 70
293        /// - encodedLength: 16
294        /// - version: 0
295        #[inline]
296        pub fn quote_volume_from_iter(&mut self, iter: impl Iterator<Item = u8>) {
297            let offset = self.offset + 70;
298            let buf = self.get_buf_mut();
299            for (i, v) in iter.enumerate() {
300                buf.put_u8_at(offset + i, v);
301            }
302        }
303
304        /// primitive array field 'quoteVolume' with zero padding
305        /// - min value: 0
306        /// - max value: 254
307        /// - null value: 0xff_u8
308        /// - characterEncoding: null
309        /// - semanticType: null
310        /// - encodedOffset: 70
311        /// - encodedLength: 16
312        /// - version: 0
313        #[inline]
314        pub fn quote_volume_zero_padded(&mut self, value: &[u8]) {
315            let iter = value
316                .iter()
317                .copied()
318                .chain(std::iter::repeat(0_u8))
319                .take(16);
320            self.quote_volume_from_iter(iter);
321        }
322
323        /// primitive field 'openTime'
324        /// - min value: -9223372036854775807
325        /// - max value: 9223372036854775807
326        /// - null value: -9223372036854775808_i64
327        /// - characterEncoding: null
328        /// - semanticType: null
329        /// - encodedOffset: 86
330        /// - encodedLength: 8
331        /// - version: 0
332        #[inline]
333        pub fn open_time(&mut self, value: i64) {
334            let offset = self.offset + 86;
335            self.get_buf_mut().put_i64_at(offset, value);
336        }
337
338        /// primitive field 'closeTime'
339        /// - min value: -9223372036854775807
340        /// - max value: 9223372036854775807
341        /// - null value: -9223372036854775808_i64
342        /// - characterEncoding: null
343        /// - semanticType: null
344        /// - encodedOffset: 94
345        /// - encodedLength: 8
346        /// - version: 0
347        #[inline]
348        pub fn close_time(&mut self, value: i64) {
349            let offset = self.offset + 94;
350            self.get_buf_mut().put_i64_at(offset, value);
351        }
352
353        /// primitive field 'firstId'
354        /// - min value: -9223372036854775807
355        /// - max value: 9223372036854775807
356        /// - null value: -9223372036854775808_i64
357        /// - characterEncoding: null
358        /// - semanticType: null
359        /// - encodedOffset: 102
360        /// - encodedLength: 8
361        /// - version: 0
362        #[inline]
363        pub fn first_id(&mut self, value: i64) {
364            let offset = self.offset + 102;
365            self.get_buf_mut().put_i64_at(offset, value);
366        }
367
368        /// primitive field 'lastId'
369        /// - min value: -9223372036854775807
370        /// - max value: 9223372036854775807
371        /// - null value: -9223372036854775808_i64
372        /// - characterEncoding: null
373        /// - semanticType: null
374        /// - encodedOffset: 110
375        /// - encodedLength: 8
376        /// - version: 0
377        #[inline]
378        pub fn last_id(&mut self, value: i64) {
379            let offset = self.offset + 110;
380            self.get_buf_mut().put_i64_at(offset, value);
381        }
382
383        /// primitive field 'numTrades'
384        /// - min value: -9223372036854775807
385        /// - max value: 9223372036854775807
386        /// - null value: -9223372036854775808_i64
387        /// - characterEncoding: null
388        /// - semanticType: null
389        /// - encodedOffset: 118
390        /// - encodedLength: 8
391        /// - version: 0
392        #[inline]
393        pub fn num_trades(&mut self, value: i64) {
394            let offset = self.offset + 118;
395            self.get_buf_mut().put_i64_at(offset, value);
396        }
397
398        /// VAR_DATA ENCODER - character encoding: 'UTF-8'
399        #[inline]
400        pub fn symbol(&mut self, value: &str) {
401            let limit = self.get_limit();
402            let data_length = value.len();
403            self.set_limit(limit + 1 + data_length);
404            self.get_buf_mut().put_u8_at(limit, data_length as u8);
405            self.get_buf_mut().put_slice_at(limit + 1, value.as_bytes());
406        }
407    }
408} // end encoder
409
410pub mod decoder {
411    use message_header_codec::*;
412
413    use super::*;
414
415    #[derive(Clone, Copy, Debug, Default)]
416    pub struct TickerSymbolFullResponseDecoder<'a> {
417        buf: ReadBuf<'a>,
418        initial_offset: usize,
419        offset: usize,
420        limit: usize,
421        pub acting_block_length: u16,
422        pub acting_version: u16,
423    }
424
425    impl ActingVersion for TickerSymbolFullResponseDecoder<'_> {
426        #[inline]
427        fn acting_version(&self) -> u16 {
428            self.acting_version
429        }
430    }
431
432    impl<'a> Reader<'a> for TickerSymbolFullResponseDecoder<'a> {
433        #[inline]
434        fn get_buf(&self) -> &ReadBuf<'a> {
435            &self.buf
436        }
437    }
438
439    impl<'a> Decoder<'a> for TickerSymbolFullResponseDecoder<'a> {
440        #[inline]
441        fn get_limit(&self) -> usize {
442            self.limit
443        }
444
445        #[inline]
446        fn set_limit(&mut self, limit: usize) {
447            self.limit = limit;
448        }
449    }
450
451    impl<'a> TickerSymbolFullResponseDecoder<'a> {
452        pub fn wrap(
453            mut self,
454            buf: ReadBuf<'a>,
455            offset: usize,
456            acting_block_length: u16,
457            acting_version: u16,
458        ) -> Self {
459            let limit = offset + acting_block_length as usize;
460            self.buf = buf;
461            self.initial_offset = offset;
462            self.offset = offset;
463            self.limit = limit;
464            self.acting_block_length = acting_block_length;
465            self.acting_version = acting_version;
466            self
467        }
468
469        #[inline]
470        pub fn encoded_length(&self) -> usize {
471            self.limit - self.offset
472        }
473
474        pub fn header(self, mut header: MessageHeaderDecoder<ReadBuf<'a>>, offset: usize) -> Self {
475            debug_assert_eq!(SBE_TEMPLATE_ID, header.template_id());
476            let acting_block_length = header.block_length();
477            let acting_version = header.version();
478
479            self.wrap(
480                header.parent().unwrap(),
481                offset + message_header_codec::ENCODED_LENGTH,
482                acting_block_length,
483                acting_version,
484            )
485        }
486
487        /// primitive field - 'REQUIRED'
488        #[inline]
489        pub fn price_exponent(&self) -> i8 {
490            self.get_buf().get_i8_at(self.offset)
491        }
492
493        /// primitive field - 'REQUIRED'
494        #[inline]
495        pub fn qty_exponent(&self) -> i8 {
496            self.get_buf().get_i8_at(self.offset + 1)
497        }
498
499        /// primitive field - 'OPTIONAL' { null_value: '-9223372036854775808_i64' }
500        #[inline]
501        pub fn price_change(&self) -> Option<i64> {
502            let value = self.get_buf().get_i64_at(self.offset + 2);
503            if value == -9223372036854775808_i64 {
504                None
505            } else {
506                Some(value)
507            }
508        }
509
510        /// primitive field - 'OPTIONAL' { null_value: 'f32::NAN' }
511        #[inline]
512        pub fn price_change_percent(&self) -> Option<f32> {
513            let value = self.get_buf().get_f32_at(self.offset + 10);
514            if value.is_nan() { None } else { Some(value) }
515        }
516
517        /// primitive field - 'OPTIONAL' { null_value: '-9223372036854775808_i64' }
518        #[inline]
519        pub fn weighted_avg_price(&self) -> Option<i64> {
520            let value = self.get_buf().get_i64_at(self.offset + 14);
521            if value == -9223372036854775808_i64 {
522                None
523            } else {
524                Some(value)
525            }
526        }
527
528        /// primitive field - 'OPTIONAL' { null_value: '-9223372036854775808_i64' }
529        #[inline]
530        pub fn open_price(&self) -> Option<i64> {
531            let value = self.get_buf().get_i64_at(self.offset + 22);
532            if value == -9223372036854775808_i64 {
533                None
534            } else {
535                Some(value)
536            }
537        }
538
539        /// primitive field - 'OPTIONAL' { null_value: '-9223372036854775808_i64' }
540        #[inline]
541        pub fn high_price(&self) -> Option<i64> {
542            let value = self.get_buf().get_i64_at(self.offset + 30);
543            if value == -9223372036854775808_i64 {
544                None
545            } else {
546                Some(value)
547            }
548        }
549
550        /// primitive field - 'OPTIONAL' { null_value: '-9223372036854775808_i64' }
551        #[inline]
552        pub fn low_price(&self) -> Option<i64> {
553            let value = self.get_buf().get_i64_at(self.offset + 38);
554            if value == -9223372036854775808_i64 {
555                None
556            } else {
557                Some(value)
558            }
559        }
560
561        /// primitive field - 'OPTIONAL' { null_value: '-9223372036854775808_i64' }
562        #[inline]
563        pub fn last_price(&self) -> Option<i64> {
564            let value = self.get_buf().get_i64_at(self.offset + 46);
565            if value == -9223372036854775808_i64 {
566                None
567            } else {
568                Some(value)
569            }
570        }
571
572        #[inline]
573        pub fn volume(&self) -> [u8; 16] {
574            let buf = self.get_buf();
575            ReadBuf::get_bytes_at(buf.data, self.offset + 54)
576        }
577
578        #[inline]
579        pub fn quote_volume(&self) -> [u8; 16] {
580            let buf = self.get_buf();
581            ReadBuf::get_bytes_at(buf.data, self.offset + 70)
582        }
583
584        /// primitive field - 'REQUIRED'
585        #[inline]
586        pub fn open_time(&self) -> i64 {
587            self.get_buf().get_i64_at(self.offset + 86)
588        }
589
590        /// primitive field - 'REQUIRED'
591        #[inline]
592        pub fn close_time(&self) -> i64 {
593            self.get_buf().get_i64_at(self.offset + 94)
594        }
595
596        /// primitive field - 'OPTIONAL' { null_value: '-9223372036854775808_i64' }
597        #[inline]
598        pub fn first_id(&self) -> Option<i64> {
599            let value = self.get_buf().get_i64_at(self.offset + 102);
600            if value == -9223372036854775808_i64 {
601                None
602            } else {
603                Some(value)
604            }
605        }
606
607        /// primitive field - 'OPTIONAL' { null_value: '-9223372036854775808_i64' }
608        #[inline]
609        pub fn last_id(&self) -> Option<i64> {
610            let value = self.get_buf().get_i64_at(self.offset + 110);
611            if value == -9223372036854775808_i64 {
612                None
613            } else {
614                Some(value)
615            }
616        }
617
618        /// primitive field - 'REQUIRED'
619        #[inline]
620        pub fn num_trades(&self) -> i64 {
621            self.get_buf().get_i64_at(self.offset + 118)
622        }
623
624        /// VAR_DATA DECODER - character encoding: 'UTF-8'
625        #[inline]
626        pub fn symbol_decoder(&mut self) -> (usize, usize) {
627            let offset = self.get_limit();
628            let data_length = self.get_buf().get_u8_at(offset) as usize;
629            self.set_limit(offset + 1 + data_length);
630            (offset + 1, data_length)
631        }
632
633        #[inline]
634        pub fn symbol_slice(&'a self, coordinates: (usize, usize)) -> &'a [u8] {
635            debug_assert!(self.get_limit() >= coordinates.0 + coordinates.1);
636            self.get_buf().get_slice_at(coordinates.0, coordinates.1)
637        }
638    }
639} // end decoder