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