nautilus_binance/spot/sbe/generated/
order_response_codec.rs1pub use decoder::OrderResponseDecoder;
2pub use encoder::OrderResponseEncoder;
3
4use super::*;
5pub use super::{SBE_SCHEMA_ID, SBE_SCHEMA_VERSION, SBE_SEMANTIC_VERSION};
6
7pub const SBE_BLOCK_LENGTH: u16 = 162;
8pub const SBE_TEMPLATE_ID: u16 = 304;
9
10pub mod encoder {
11 use message_header_codec::*;
12
13 use super::*;
14
15 #[derive(Debug, Default)]
16 pub struct OrderResponseEncoder<'a> {
17 buf: WriteBuf<'a>,
18 initial_offset: usize,
19 offset: usize,
20 limit: usize,
21 }
22
23 impl<'a> Writer<'a> for OrderResponseEncoder<'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 OrderResponseEncoder<'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> OrderResponseEncoder<'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 #[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 #[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 #[inline]
106 pub fn order_id(&mut self, value: i64) {
107 let offset = self.offset + 2;
108 self.get_buf_mut().put_i64_at(offset, value);
109 }
110
111 #[inline]
121 pub fn order_list_id(&mut self, value: i64) {
122 let offset = self.offset + 10;
123 self.get_buf_mut().put_i64_at(offset, value);
124 }
125
126 #[inline]
136 pub fn price(&mut self, value: i64) {
137 let offset = self.offset + 18;
138 self.get_buf_mut().put_i64_at(offset, value);
139 }
140
141 #[inline]
151 pub fn orig_qty(&mut self, value: i64) {
152 let offset = self.offset + 26;
153 self.get_buf_mut().put_i64_at(offset, value);
154 }
155
156 #[inline]
166 pub fn executed_qty(&mut self, value: i64) {
167 let offset = self.offset + 34;
168 self.get_buf_mut().put_i64_at(offset, value);
169 }
170
171 #[inline]
181 pub fn cummulative_quote_qty(&mut self, value: i64) {
182 let offset = self.offset + 42;
183 self.get_buf_mut().put_i64_at(offset, value);
184 }
185
186 #[inline]
188 pub fn status(&mut self, value: order_status::OrderStatus) {
189 let offset = self.offset + 50;
190 self.get_buf_mut().put_u8_at(offset, value as u8)
191 }
192
193 #[inline]
195 pub fn time_in_force(&mut self, value: time_in_force::TimeInForce) {
196 let offset = self.offset + 51;
197 self.get_buf_mut().put_u8_at(offset, value as u8)
198 }
199
200 #[inline]
202 pub fn order_type(&mut self, value: order_type::OrderType) {
203 let offset = self.offset + 52;
204 self.get_buf_mut().put_u8_at(offset, value as u8)
205 }
206
207 #[inline]
209 pub fn side(&mut self, value: order_side::OrderSide) {
210 let offset = self.offset + 53;
211 self.get_buf_mut().put_u8_at(offset, value as u8)
212 }
213
214 #[inline]
224 pub fn stop_price(&mut self, value: i64) {
225 let offset = self.offset + 54;
226 self.get_buf_mut().put_i64_at(offset, value);
227 }
228
229 #[inline]
239 pub fn trailing_delta(&mut self, value: i64) {
240 let offset = self.offset + 62;
241 self.get_buf_mut().put_i64_at(offset, value);
242 }
243
244 #[inline]
254 pub fn trailing_time(&mut self, value: i64) {
255 let offset = self.offset + 70;
256 self.get_buf_mut().put_i64_at(offset, value);
257 }
258
259 #[inline]
269 pub fn iceberg_qty(&mut self, value: i64) {
270 let offset = self.offset + 78;
271 self.get_buf_mut().put_i64_at(offset, value);
272 }
273
274 #[inline]
284 pub fn time(&mut self, value: i64) {
285 let offset = self.offset + 86;
286 self.get_buf_mut().put_i64_at(offset, value);
287 }
288
289 #[inline]
299 pub fn update_time(&mut self, value: i64) {
300 let offset = self.offset + 94;
301 self.get_buf_mut().put_i64_at(offset, value);
302 }
303
304 #[inline]
306 pub fn is_working(&mut self, value: bool_enum::BoolEnum) {
307 let offset = self.offset + 102;
308 self.get_buf_mut().put_u8_at(offset, value as u8)
309 }
310
311 #[inline]
321 pub fn working_time(&mut self, value: i64) {
322 let offset = self.offset + 103;
323 self.get_buf_mut().put_i64_at(offset, value);
324 }
325
326 #[inline]
336 pub fn orig_quote_order_qty(&mut self, value: i64) {
337 let offset = self.offset + 111;
338 self.get_buf_mut().put_i64_at(offset, value);
339 }
340
341 #[inline]
351 pub fn strategy_id(&mut self, value: i64) {
352 let offset = self.offset + 119;
353 self.get_buf_mut().put_i64_at(offset, value);
354 }
355
356 #[inline]
366 pub fn strategy_type(&mut self, value: i32) {
367 let offset = self.offset + 127;
368 self.get_buf_mut().put_i32_at(offset, value);
369 }
370
371 #[inline]
373 pub fn order_capacity(&mut self, value: order_capacity::OrderCapacity) {
374 let offset = self.offset + 131;
375 self.get_buf_mut().put_u8_at(offset, value as u8)
376 }
377
378 #[inline]
380 pub fn working_floor(&mut self, value: floor::Floor) {
381 let offset = self.offset + 132;
382 self.get_buf_mut().put_u8_at(offset, value as u8)
383 }
384
385 #[inline]
387 pub fn self_trade_prevention_mode(
388 &mut self,
389 value: self_trade_prevention_mode::SelfTradePreventionMode,
390 ) {
391 let offset = self.offset + 133;
392 self.get_buf_mut().put_u8_at(offset, value as u8)
393 }
394
395 #[inline]
405 pub fn prevented_match_id(&mut self, value: i64) {
406 let offset = self.offset + 134;
407 self.get_buf_mut().put_i64_at(offset, value);
408 }
409
410 #[inline]
420 pub fn prevented_quantity(&mut self, value: i64) {
421 let offset = self.offset + 142;
422 self.get_buf_mut().put_i64_at(offset, value);
423 }
424
425 #[inline]
427 pub fn used_sor(&mut self, value: bool_enum::BoolEnum) {
428 let offset = self.offset + 150;
429 self.get_buf_mut().put_u8_at(offset, value as u8)
430 }
431
432 #[inline]
434 pub fn peg_price_type(&mut self, value: peg_price_type::PegPriceType) {
435 let offset = self.offset + 151;
436 self.get_buf_mut().put_u8_at(offset, value as u8)
437 }
438
439 #[inline]
441 pub fn peg_offset_type(&mut self, value: peg_offset_type::PegOffsetType) {
442 let offset = self.offset + 152;
443 self.get_buf_mut().put_u8_at(offset, value as u8)
444 }
445
446 #[inline]
456 pub fn peg_offset_value(&mut self, value: u8) {
457 let offset = self.offset + 153;
458 self.get_buf_mut().put_u8_at(offset, value);
459 }
460
461 #[inline]
471 pub fn pegged_price(&mut self, value: i64) {
472 let offset = self.offset + 154;
473 self.get_buf_mut().put_i64_at(offset, value);
474 }
475
476 #[inline]
478 pub fn symbol(&mut self, value: &str) {
479 let limit = self.get_limit();
480 let data_length = value.len();
481 self.set_limit(limit + 1 + data_length);
482 self.get_buf_mut().put_u8_at(limit, data_length as u8);
483 self.get_buf_mut().put_slice_at(limit + 1, value.as_bytes());
484 }
485
486 #[inline]
488 pub fn client_order_id(&mut self, value: &str) {
489 let limit = self.get_limit();
490 let data_length = value.len();
491 self.set_limit(limit + 1 + data_length);
492 self.get_buf_mut().put_u8_at(limit, data_length as u8);
493 self.get_buf_mut().put_slice_at(limit + 1, value.as_bytes());
494 }
495 }
496} pub mod decoder {
499 use message_header_codec::*;
500
501 use super::*;
502
503 #[derive(Clone, Copy, Debug, Default)]
504 pub struct OrderResponseDecoder<'a> {
505 buf: ReadBuf<'a>,
506 initial_offset: usize,
507 offset: usize,
508 limit: usize,
509 pub acting_block_length: u16,
510 pub acting_version: u16,
511 }
512
513 impl ActingVersion for OrderResponseDecoder<'_> {
514 #[inline]
515 fn acting_version(&self) -> u16 {
516 self.acting_version
517 }
518 }
519
520 impl<'a> Reader<'a> for OrderResponseDecoder<'a> {
521 #[inline]
522 fn get_buf(&self) -> &ReadBuf<'a> {
523 &self.buf
524 }
525 }
526
527 impl<'a> Decoder<'a> for OrderResponseDecoder<'a> {
528 #[inline]
529 fn get_limit(&self) -> usize {
530 self.limit
531 }
532
533 #[inline]
534 fn set_limit(&mut self, limit: usize) {
535 self.limit = limit;
536 }
537 }
538
539 impl<'a> OrderResponseDecoder<'a> {
540 pub fn wrap(
541 mut self,
542 buf: ReadBuf<'a>,
543 offset: usize,
544 acting_block_length: u16,
545 acting_version: u16,
546 ) -> Self {
547 let limit = offset + acting_block_length as usize;
548 self.buf = buf;
549 self.initial_offset = offset;
550 self.offset = offset;
551 self.limit = limit;
552 self.acting_block_length = acting_block_length;
553 self.acting_version = acting_version;
554 self
555 }
556
557 #[inline]
558 pub fn encoded_length(&self) -> usize {
559 self.limit - self.offset
560 }
561
562 pub fn header(self, mut header: MessageHeaderDecoder<ReadBuf<'a>>, offset: usize) -> Self {
563 debug_assert_eq!(SBE_TEMPLATE_ID, header.template_id());
564 let acting_block_length = header.block_length();
565 let acting_version = header.version();
566
567 self.wrap(
568 header.parent().unwrap(),
569 offset + message_header_codec::ENCODED_LENGTH,
570 acting_block_length,
571 acting_version,
572 )
573 }
574
575 #[inline]
577 pub fn price_exponent(&self) -> i8 {
578 self.get_buf().get_i8_at(self.offset)
579 }
580
581 #[inline]
583 pub fn qty_exponent(&self) -> i8 {
584 self.get_buf().get_i8_at(self.offset + 1)
585 }
586
587 #[inline]
589 pub fn order_id(&self) -> i64 {
590 self.get_buf().get_i64_at(self.offset + 2)
591 }
592
593 #[inline]
595 pub fn order_list_id(&self) -> Option<i64> {
596 let value = self.get_buf().get_i64_at(self.offset + 10);
597 if value == -9223372036854775808_i64 {
598 None
599 } else {
600 Some(value)
601 }
602 }
603
604 #[inline]
606 pub fn price(&self) -> i64 {
607 self.get_buf().get_i64_at(self.offset + 18)
608 }
609
610 #[inline]
612 pub fn orig_qty(&self) -> i64 {
613 self.get_buf().get_i64_at(self.offset + 26)
614 }
615
616 #[inline]
618 pub fn executed_qty(&self) -> i64 {
619 self.get_buf().get_i64_at(self.offset + 34)
620 }
621
622 #[inline]
624 pub fn cummulative_quote_qty(&self) -> i64 {
625 self.get_buf().get_i64_at(self.offset + 42)
626 }
627
628 #[inline]
630 pub fn status(&self) -> order_status::OrderStatus {
631 self.get_buf().get_u8_at(self.offset + 50).into()
632 }
633
634 #[inline]
636 pub fn time_in_force(&self) -> time_in_force::TimeInForce {
637 self.get_buf().get_u8_at(self.offset + 51).into()
638 }
639
640 #[inline]
642 pub fn order_type(&self) -> order_type::OrderType {
643 self.get_buf().get_u8_at(self.offset + 52).into()
644 }
645
646 #[inline]
648 pub fn side(&self) -> order_side::OrderSide {
649 self.get_buf().get_u8_at(self.offset + 53).into()
650 }
651
652 #[inline]
654 pub fn stop_price(&self) -> Option<i64> {
655 let value = self.get_buf().get_i64_at(self.offset + 54);
656 if value == -9223372036854775808_i64 {
657 None
658 } else {
659 Some(value)
660 }
661 }
662
663 #[inline]
665 pub fn trailing_delta(&self) -> Option<i64> {
666 let value = self.get_buf().get_i64_at(self.offset + 62);
667 if value == -9223372036854775808_i64 {
668 None
669 } else {
670 Some(value)
671 }
672 }
673
674 #[inline]
676 pub fn trailing_time(&self) -> Option<i64> {
677 let value = self.get_buf().get_i64_at(self.offset + 70);
678 if value == -9223372036854775808_i64 {
679 None
680 } else {
681 Some(value)
682 }
683 }
684
685 #[inline]
687 pub fn iceberg_qty(&self) -> Option<i64> {
688 let value = self.get_buf().get_i64_at(self.offset + 78);
689 if value == -9223372036854775808_i64 {
690 None
691 } else {
692 Some(value)
693 }
694 }
695
696 #[inline]
698 pub fn time(&self) -> i64 {
699 self.get_buf().get_i64_at(self.offset + 86)
700 }
701
702 #[inline]
704 pub fn update_time(&self) -> i64 {
705 self.get_buf().get_i64_at(self.offset + 94)
706 }
707
708 #[inline]
710 pub fn is_working(&self) -> bool_enum::BoolEnum {
711 self.get_buf().get_u8_at(self.offset + 102).into()
712 }
713
714 #[inline]
716 pub fn working_time(&self) -> Option<i64> {
717 let value = self.get_buf().get_i64_at(self.offset + 103);
718 if value == -9223372036854775808_i64 {
719 None
720 } else {
721 Some(value)
722 }
723 }
724
725 #[inline]
727 pub fn orig_quote_order_qty(&self) -> i64 {
728 self.get_buf().get_i64_at(self.offset + 111)
729 }
730
731 #[inline]
733 pub fn strategy_id(&self) -> Option<i64> {
734 let value = self.get_buf().get_i64_at(self.offset + 119);
735 if value == -9223372036854775808_i64 {
736 None
737 } else {
738 Some(value)
739 }
740 }
741
742 #[inline]
744 pub fn strategy_type(&self) -> Option<i32> {
745 let value = self.get_buf().get_i32_at(self.offset + 127);
746 if value == -2147483648_i32 {
747 None
748 } else {
749 Some(value)
750 }
751 }
752
753 #[inline]
755 pub fn order_capacity(&self) -> order_capacity::OrderCapacity {
756 self.get_buf().get_u8_at(self.offset + 131).into()
757 }
758
759 #[inline]
761 pub fn working_floor(&self) -> floor::Floor {
762 self.get_buf().get_u8_at(self.offset + 132).into()
763 }
764
765 #[inline]
767 pub fn self_trade_prevention_mode(
768 &self,
769 ) -> self_trade_prevention_mode::SelfTradePreventionMode {
770 self.get_buf().get_u8_at(self.offset + 133).into()
771 }
772
773 #[inline]
775 pub fn prevented_match_id(&self) -> Option<i64> {
776 let value = self.get_buf().get_i64_at(self.offset + 134);
777 if value == -9223372036854775808_i64 {
778 None
779 } else {
780 Some(value)
781 }
782 }
783
784 #[inline]
786 pub fn prevented_quantity(&self) -> i64 {
787 self.get_buf().get_i64_at(self.offset + 142)
788 }
789
790 #[inline]
792 pub fn used_sor(&self) -> bool_enum::BoolEnum {
793 self.get_buf().get_u8_at(self.offset + 150).into()
794 }
795
796 #[inline]
798 pub fn peg_price_type(&self) -> peg_price_type::PegPriceType {
799 if self.acting_version() < 1 {
800 return peg_price_type::PegPriceType::default();
801 }
802
803 self.get_buf().get_u8_at(self.offset + 151).into()
804 }
805
806 #[inline]
808 pub fn peg_offset_type(&self) -> peg_offset_type::PegOffsetType {
809 if self.acting_version() < 1 {
810 return peg_offset_type::PegOffsetType::default();
811 }
812
813 self.get_buf().get_u8_at(self.offset + 152).into()
814 }
815
816 #[inline]
818 pub fn peg_offset_value(&self) -> Option<u8> {
819 if self.acting_version() < 1 {
820 return None;
821 }
822
823 let value = self.get_buf().get_u8_at(self.offset + 153);
824 if value == 0xff_u8 { None } else { Some(value) }
825 }
826
827 #[inline]
829 pub fn pegged_price(&self) -> Option<i64> {
830 if self.acting_version() < 1 {
831 return None;
832 }
833
834 let value = self.get_buf().get_i64_at(self.offset + 154);
835 if value == -9223372036854775808_i64 {
836 None
837 } else {
838 Some(value)
839 }
840 }
841
842 #[inline]
844 pub fn symbol_decoder(&mut self) -> (usize, usize) {
845 let offset = self.get_limit();
846 let data_length = self.get_buf().get_u8_at(offset) as usize;
847 self.set_limit(offset + 1 + data_length);
848 (offset + 1, data_length)
849 }
850
851 #[inline]
852 pub fn symbol_slice(&'a self, coordinates: (usize, usize)) -> &'a [u8] {
853 debug_assert!(self.get_limit() >= coordinates.0 + coordinates.1);
854 self.get_buf().get_slice_at(coordinates.0, coordinates.1)
855 }
856
857 #[inline]
859 pub fn client_order_id_decoder(&mut self) -> (usize, usize) {
860 let offset = self.get_limit();
861 let data_length = self.get_buf().get_u8_at(offset) as usize;
862 self.set_limit(offset + 1 + data_length);
863 (offset + 1, data_length)
864 }
865
866 #[inline]
867 pub fn client_order_id_slice(&'a self, coordinates: (usize, usize)) -> &'a [u8] {
868 debug_assert!(self.get_limit() >= coordinates.0 + coordinates.1);
869 self.get_buf().get_slice_at(coordinates.0, coordinates.1)
870 }
871 }
872}