1use std::str::FromStr;
19
20use serde::{Deserialize, Deserializer, Serialize, Serializer};
21use strum::{AsRefStr, Display, EnumIter, EnumString, FromRepr};
22
23use crate::enum_strum_serde;
24
25pub trait FromU8 {
26 fn from_u8(value: u8) -> Option<Self>
27 where
28 Self: Sized;
29}
30
31pub trait FromU16 {
32 fn from_u16(value: u16) -> Option<Self>
33 where
34 Self: Sized;
35}
36
37#[repr(C)]
39#[derive(
40 Copy,
41 Clone,
42 Debug,
43 Display,
44 Hash,
45 PartialEq,
46 Eq,
47 PartialOrd,
48 Ord,
49 AsRefStr,
50 FromRepr,
51 EnumIter,
52 EnumString,
53)]
54#[strum(ascii_case_insensitive)]
55#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
56#[cfg_attr(
57 feature = "python",
58 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
59)]
60pub enum AccountType {
61 Cash = 1,
63 Margin = 2,
65 Betting = 3,
67}
68
69#[repr(C)]
71#[derive(
72 Copy,
73 Clone,
74 Debug,
75 Display,
76 Hash,
77 PartialEq,
78 Eq,
79 PartialOrd,
80 Ord,
81 AsRefStr,
82 FromRepr,
83 EnumIter,
84 EnumString,
85)]
86#[strum(ascii_case_insensitive)]
87#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
88#[cfg_attr(
89 feature = "python",
90 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
91)]
92pub enum AggregationSource {
93 External = 1,
95 Internal = 2,
97}
98
99#[repr(C)]
101#[derive(
102 Copy,
103 Clone,
104 Debug,
105 Default,
106 Display,
107 Hash,
108 PartialEq,
109 Eq,
110 PartialOrd,
111 Ord,
112 AsRefStr,
113 FromRepr,
114 EnumIter,
115 EnumString,
116)]
117#[strum(ascii_case_insensitive)]
118#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
119#[cfg_attr(
120 feature = "python",
121 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
122)]
123pub enum AggressorSide {
124 #[default]
126 NoAggressor = 0,
127 Buyer = 1,
129 Seller = 2,
131}
132
133impl FromU8 for AggressorSide {
134 fn from_u8(value: u8) -> Option<Self> {
135 match value {
136 0 => Some(Self::NoAggressor),
137 1 => Some(Self::Buyer),
138 2 => Some(Self::Seller),
139 _ => None,
140 }
141 }
142}
143
144#[repr(C)]
146#[derive(
147 Copy,
148 Clone,
149 Debug,
150 Display,
151 Hash,
152 PartialEq,
153 Eq,
154 PartialOrd,
155 Ord,
156 AsRefStr,
157 FromRepr,
158 EnumIter,
159 EnumString,
160)]
161#[strum(ascii_case_insensitive)]
162#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
163#[cfg_attr(
164 feature = "python",
165 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
166)]
167#[allow(non_camel_case_types)]
168pub enum AssetClass {
169 FX = 1,
171 Equity = 2,
173 Commodity = 3,
175 Debt = 4,
177 Index = 5,
179 Cryptocurrency = 6,
181 Alternative = 7,
183}
184
185impl FromU8 for AssetClass {
186 fn from_u8(value: u8) -> Option<Self> {
187 match value {
188 1 => Some(Self::FX),
189 2 => Some(Self::Equity),
190 3 => Some(Self::Commodity),
191 4 => Some(Self::Debt),
192 5 => Some(Self::Index),
193 6 => Some(Self::Cryptocurrency),
194 7 => Some(Self::Alternative),
195 _ => None,
196 }
197 }
198}
199
200#[repr(C)]
202#[derive(
203 Copy,
204 Clone,
205 Debug,
206 Display,
207 Hash,
208 PartialEq,
209 Eq,
210 PartialOrd,
211 Ord,
212 AsRefStr,
213 FromRepr,
214 EnumIter,
215 EnumString,
216)]
217#[strum(ascii_case_insensitive)]
218#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
219#[cfg_attr(
220 feature = "python",
221 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
222)]
223pub enum InstrumentClass {
224 Spot = 1,
226 Swap = 2,
228 Future = 3,
230 FuturesSpread = 4,
232 Forward = 5,
234 Cfd = 6,
236 Bond = 7,
238 Option = 8,
240 OptionSpread = 9,
242 Warrant = 10,
244 SportsBetting = 11,
246 BinaryOption = 12,
249}
250
251#[repr(C)]
253#[derive(
254 Copy,
255 Clone,
256 Debug,
257 Display,
258 Hash,
259 PartialEq,
260 Eq,
261 PartialOrd,
262 Ord,
263 AsRefStr,
264 FromRepr,
265 EnumIter,
266 EnumString,
267)]
268#[strum(ascii_case_insensitive)]
269#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
270#[cfg_attr(
271 feature = "python",
272 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
273)]
274pub enum BarAggregation {
275 Tick = 1,
277 TickImbalance = 2,
279 TickRuns = 3,
281 Volume = 4,
283 VolumeImbalance = 5,
285 VolumeRuns = 6,
287 Value = 7,
289 ValueImbalance = 8,
291 ValueRuns = 9,
293 Millisecond = 10,
295 Second = 11,
297 Minute = 12,
299 Hour = 13,
301 Day = 14,
303 Week = 15,
305 Month = 16,
307}
308
309#[repr(C)]
311#[derive(
312 Copy,
313 Clone,
314 Debug,
315 Default,
316 Display,
317 Hash,
318 PartialEq,
319 Eq,
320 PartialOrd,
321 Ord,
322 AsRefStr,
323 FromRepr,
324 EnumIter,
325 EnumString,
326)]
327#[strum(ascii_case_insensitive)]
328#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
329#[cfg_attr(
330 feature = "python",
331 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
332)]
333pub enum BarIntervalType {
334 #[default]
336 LeftOpen = 1,
337 RightOpen = 2,
339}
340
341#[repr(C)]
343#[derive(
344 Copy,
345 Clone,
346 Debug,
347 Display,
348 Hash,
349 PartialEq,
350 Eq,
351 PartialOrd,
352 Ord,
353 AsRefStr,
354 FromRepr,
355 EnumIter,
356 EnumString,
357)]
358#[strum(ascii_case_insensitive)]
359#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
360#[cfg_attr(
361 feature = "python",
362 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
363)]
364pub enum BetSide {
365 Back = 1,
367 Lay = 2,
369}
370
371impl BetSide {
372 #[must_use]
374 pub fn opposite(&self) -> Self {
375 match self {
376 Self::Back => Self::Lay,
377 Self::Lay => Self::Back,
378 }
379 }
380}
381
382impl From<OrderSide> for BetSide {
383 fn from(side: OrderSide) -> Self {
389 match side {
390 OrderSide::Buy => BetSide::Back,
391 OrderSide::Sell => BetSide::Lay,
392 OrderSide::NoOrderSide => panic!("Invalid `OrderSide` for `BetSide`, was {side}"),
393 }
394 }
395}
396
397#[repr(C)]
399#[derive(
400 Copy,
401 Clone,
402 Debug,
403 Display,
404 Hash,
405 PartialEq,
406 Eq,
407 PartialOrd,
408 Ord,
409 AsRefStr,
410 FromRepr,
411 EnumIter,
412 EnumString,
413)]
414#[strum(ascii_case_insensitive)]
415#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
416#[cfg_attr(
417 feature = "python",
418 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
419)]
420pub enum BookAction {
421 Add = 1,
423 Update = 2,
425 Delete = 3,
427 Clear = 4,
429}
430
431impl FromU8 for BookAction {
432 fn from_u8(value: u8) -> Option<Self> {
433 match value {
434 1 => Some(Self::Add),
435 2 => Some(Self::Update),
436 3 => Some(Self::Delete),
437 4 => Some(Self::Clear),
438 _ => None,
439 }
440 }
441}
442
443#[repr(C)]
445#[derive(
446 Copy,
447 Clone,
448 Debug,
449 Display,
450 Hash,
451 PartialEq,
452 Eq,
453 PartialOrd,
454 Ord,
455 AsRefStr,
456 FromRepr,
457 EnumIter,
458 EnumString,
459)]
460#[strum(ascii_case_insensitive)]
461#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
462#[allow(non_camel_case_types)]
463#[cfg_attr(
464 feature = "python",
465 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
466)]
467pub enum BookType {
468 L1_MBP = 1,
470 L2_MBP = 2,
472 L3_MBO = 3,
474}
475
476impl FromU8 for BookType {
477 fn from_u8(value: u8) -> Option<Self> {
478 match value {
479 1 => Some(Self::L1_MBP),
480 2 => Some(Self::L2_MBP),
481 3 => Some(Self::L3_MBO),
482 _ => None,
483 }
484 }
485}
486
487#[repr(C)]
491#[derive(
492 Copy,
493 Clone,
494 Debug,
495 Default,
496 Display,
497 Hash,
498 PartialEq,
499 Eq,
500 PartialOrd,
501 Ord,
502 AsRefStr,
503 FromRepr,
504 EnumIter,
505 EnumString,
506)]
507#[strum(ascii_case_insensitive)]
508#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
509#[cfg_attr(
510 feature = "python",
511 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
512)]
513pub enum ContingencyType {
514 #[default]
516 NoContingency = 0,
517 Oco = 1,
519 Oto = 2,
521 Ouo = 3,
523}
524
525#[repr(C)]
527#[derive(
528 Copy,
529 Clone,
530 Debug,
531 Display,
532 Hash,
533 PartialEq,
534 Eq,
535 PartialOrd,
536 Ord,
537 AsRefStr,
538 FromRepr,
539 EnumIter,
540 EnumString,
541)]
542#[strum(ascii_case_insensitive)]
543#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
544#[cfg_attr(
545 feature = "python",
546 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
547)]
548pub enum CurrencyType {
549 Crypto = 1,
551 Fiat = 2,
553 CommodityBacked = 3,
555}
556
557#[repr(C)]
559#[derive(
560 Copy,
561 Clone,
562 Debug,
563 Display,
564 Hash,
565 PartialEq,
566 Eq,
567 PartialOrd,
568 Ord,
569 AsRefStr,
570 FromRepr,
571 EnumIter,
572 EnumString,
573)]
574#[strum(ascii_case_insensitive)]
575#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
576#[cfg_attr(
577 feature = "python",
578 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
579)]
580pub enum InstrumentCloseType {
581 EndOfSession = 1,
583 ContractExpired = 2,
585}
586
587impl FromU8 for InstrumentCloseType {
589 fn from_u8(value: u8) -> Option<Self> {
590 match value {
591 1 => Some(Self::EndOfSession),
592 2 => Some(Self::ContractExpired),
593 _ => None,
594 }
595 }
596}
597
598#[repr(C)]
600#[derive(
601 Copy,
602 Clone,
603 Debug,
604 Display,
605 Hash,
606 PartialEq,
607 Eq,
608 PartialOrd,
609 Ord,
610 AsRefStr,
611 FromRepr,
612 EnumIter,
613 EnumString,
614)]
615#[strum(ascii_case_insensitive)]
616#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
617#[cfg_attr(
618 feature = "python",
619 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
620)]
621#[allow(clippy::enum_variant_names)]
622pub enum LiquiditySide {
623 NoLiquiditySide = 0,
625 Maker = 1,
627 Taker = 2,
629}
630
631#[repr(C)]
633#[derive(
634 Copy,
635 Clone,
636 Debug,
637 Display,
638 Hash,
639 PartialEq,
640 Eq,
641 PartialOrd,
642 Ord,
643 AsRefStr,
644 FromRepr,
645 EnumIter,
646 EnumString,
647)]
648#[strum(ascii_case_insensitive)]
649#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
650#[cfg_attr(
651 feature = "python",
652 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
653)]
654pub enum MarketStatus {
655 Open = 1,
657 Closed = 2,
659 Paused = 3,
661 Suspended = 5,
665 NotAvailable = 6,
667}
668
669#[repr(C)]
671#[derive(
672 Copy,
673 Clone,
674 Debug,
675 Display,
676 Hash,
677 PartialEq,
678 Eq,
679 PartialOrd,
680 Ord,
681 AsRefStr,
682 FromRepr,
683 EnumIter,
684 EnumString,
685)]
686#[strum(ascii_case_insensitive)]
687#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
688#[cfg_attr(
689 feature = "python",
690 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
691)]
692pub enum MarketStatusAction {
693 None = 0,
695 PreOpen = 1,
697 PreCross = 2,
699 Quoting = 3,
701 Cross = 4,
703 Rotation = 5,
705 NewPriceIndication = 6,
707 Trading = 7,
709 Halt = 8,
711 Pause = 9,
713 Suspend = 10,
715 PreClose = 11,
717 Close = 12,
719 PostClose = 13,
721 ShortSellRestrictionChange = 14,
723 NotAvailableForTrading = 15,
725}
726
727impl FromU16 for MarketStatusAction {
729 fn from_u16(value: u16) -> Option<Self> {
730 match value {
731 0 => Some(Self::None),
732 1 => Some(Self::PreOpen),
733 2 => Some(Self::PreCross),
734 3 => Some(Self::Quoting),
735 4 => Some(Self::Cross),
736 5 => Some(Self::Rotation),
737 6 => Some(Self::NewPriceIndication),
738 7 => Some(Self::Trading),
739 8 => Some(Self::Halt),
740 9 => Some(Self::Pause),
741 10 => Some(Self::Suspend),
742 11 => Some(Self::PreClose),
743 12 => Some(Self::Close),
744 13 => Some(Self::PostClose),
745 14 => Some(Self::ShortSellRestrictionChange),
746 15 => Some(Self::NotAvailableForTrading),
747 _ => None,
748 }
749 }
750}
751
752#[repr(C)]
754#[derive(
755 Copy,
756 Clone,
757 Debug,
758 Default,
759 Display,
760 Hash,
761 PartialEq,
762 Eq,
763 PartialOrd,
764 Ord,
765 AsRefStr,
766 FromRepr,
767 EnumIter,
768 EnumString,
769)]
770#[strum(ascii_case_insensitive)]
771#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
772#[cfg_attr(
773 feature = "python",
774 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
775)]
776pub enum OmsType {
777 #[default]
779 Unspecified = 0,
780 Netting = 1,
782 Hedging = 2,
786}
787
788#[repr(C)]
790#[derive(
791 Copy,
792 Clone,
793 Debug,
794 Display,
795 Hash,
796 PartialEq,
797 Eq,
798 PartialOrd,
799 Ord,
800 AsRefStr,
801 FromRepr,
802 EnumIter,
803 EnumString,
804)]
805#[strum(ascii_case_insensitive)]
806#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
807#[cfg_attr(
808 feature = "python",
809 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
810)]
811pub enum OptionKind {
812 Call = 1,
814 Put = 2,
816}
817
818#[repr(C)]
820#[derive(
821 Copy,
822 Clone,
823 Debug,
824 Default,
825 Display,
826 Hash,
827 PartialEq,
828 Eq,
829 PartialOrd,
830 Ord,
831 AsRefStr,
832 FromRepr,
833 EnumIter,
834 EnumString,
835)]
836#[strum(ascii_case_insensitive)]
837#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
838#[allow(clippy::enum_variant_names)]
839#[cfg_attr(
840 feature = "python",
841 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
842)]
843pub enum OrderSide {
844 #[default]
846 NoOrderSide = 0,
847 Buy = 1,
849 Sell = 2,
851}
852
853impl OrderSide {
854 #[must_use]
860 pub fn as_specified(&self) -> OrderSideSpecified {
861 match &self {
862 Self::Buy => OrderSideSpecified::Buy,
863 Self::Sell => OrderSideSpecified::Sell,
864 _ => panic!("Order invariant failed: side must be `Buy` or `Sell`"),
865 }
866 }
867}
868
869impl FromU8 for OrderSide {
871 fn from_u8(value: u8) -> Option<Self> {
872 match value {
873 0 => Some(Self::NoOrderSide),
874 1 => Some(Self::Buy),
875 2 => Some(Self::Sell),
876 _ => None,
877 }
878 }
879}
880
881#[repr(C)]
883#[derive(
884 Copy,
885 Clone,
886 Debug,
887 Display,
888 Hash,
889 PartialEq,
890 Eq,
891 PartialOrd,
892 Ord,
893 AsRefStr,
894 FromRepr,
895 EnumIter,
896 EnumString,
897)]
898#[strum(ascii_case_insensitive)]
899#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
900#[allow(clippy::enum_variant_names)]
901pub enum OrderSideSpecified {
902 Buy = 1,
904 Sell = 2,
906}
907
908impl OrderSideSpecified {
909 #[must_use]
911 pub fn opposite(&self) -> Self {
912 match &self {
913 Self::Buy => Self::Sell,
914 Self::Sell => Self::Buy,
915 }
916 }
917
918 #[must_use]
920 pub fn as_order_side(&self) -> OrderSide {
921 match &self {
922 Self::Buy => OrderSide::Buy,
923 Self::Sell => OrderSide::Sell,
924 }
925 }
926}
927
928#[repr(C)]
949#[derive(
950 Copy,
951 Clone,
952 Debug,
953 Display,
954 Hash,
955 PartialEq,
956 Eq,
957 PartialOrd,
958 Ord,
959 AsRefStr,
960 FromRepr,
961 EnumIter,
962 EnumString,
963)]
964#[strum(ascii_case_insensitive)]
965#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
966#[cfg_attr(
967 feature = "python",
968 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
969)]
970pub enum OrderStatus {
971 Initialized = 1,
973 Denied = 2,
975 Emulated = 3,
977 Released = 4,
979 Submitted = 5,
981 Accepted = 6,
983 Rejected = 7,
985 Canceled = 8,
987 Expired = 9,
989 Triggered = 10,
991 PendingUpdate = 11,
993 PendingCancel = 12,
995 PartiallyFilled = 13,
997 Filled = 14,
999}
1000
1001#[repr(C)]
1003#[derive(
1004 Copy,
1005 Clone,
1006 Debug,
1007 Display,
1008 Hash,
1009 PartialEq,
1010 Eq,
1011 PartialOrd,
1012 Ord,
1013 AsRefStr,
1014 FromRepr,
1015 EnumIter,
1016 EnumString,
1017)]
1018#[strum(ascii_case_insensitive)]
1019#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1020#[cfg_attr(
1021 feature = "python",
1022 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1023)]
1024pub enum OrderType {
1025 Market = 1,
1027 Limit = 2,
1029 StopMarket = 3,
1031 StopLimit = 4,
1033 MarketToLimit = 5,
1035 MarketIfTouched = 6,
1037 LimitIfTouched = 7,
1039 TrailingStopMarket = 8,
1041 TrailingStopLimit = 9,
1043}
1044
1045#[repr(C)]
1047#[derive(
1048 Copy,
1049 Clone,
1050 Debug,
1051 Default,
1052 Display,
1053 Hash,
1054 PartialEq,
1055 Eq,
1056 PartialOrd,
1057 Ord,
1058 AsRefStr,
1059 FromRepr,
1060 EnumIter,
1061 EnumString,
1062)]
1063#[strum(ascii_case_insensitive)]
1064#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1065#[allow(clippy::enum_variant_names)]
1066#[cfg_attr(
1067 feature = "python",
1068 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1069)]
1070pub enum PositionSide {
1071 #[default]
1073 NoPositionSide = 0,
1074 Flat = 1,
1076 Long = 2,
1078 Short = 3,
1080}
1081
1082#[repr(C)]
1084#[derive(
1085 Copy,
1086 Clone,
1087 Debug,
1088 Display,
1089 Hash,
1090 PartialEq,
1091 Eq,
1092 PartialOrd,
1093 Ord,
1094 AsRefStr,
1095 FromRepr,
1096 EnumIter,
1097 EnumString,
1098)]
1099#[strum(ascii_case_insensitive)]
1100#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1101#[cfg_attr(
1102 feature = "python",
1103 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1104)]
1105pub enum PriceType {
1106 Bid = 1,
1109 Ask = 2,
1112 Mid = 3,
1114 Last = 4,
1116 Mark = 5,
1119}
1120
1121#[repr(C)]
1123#[derive(
1124 Copy,
1125 Clone,
1126 Debug,
1127 Display,
1128 Hash,
1129 PartialEq,
1130 Eq,
1131 PartialOrd,
1132 Ord,
1133 AsRefStr,
1134 FromRepr,
1135 EnumIter,
1136 EnumString,
1137)]
1138#[strum(ascii_case_insensitive)]
1139#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1140#[cfg_attr(
1141 feature = "python",
1142 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1143)]
1144#[allow(non_camel_case_types)]
1145pub enum RecordFlag {
1146 F_LAST = 1 << 7, F_TOB = 1 << 6, F_SNAPSHOT = 1 << 5, F_MBP = 1 << 4, RESERVED_2 = 1 << 3, RESERVED_1 = 1 << 2, }
1159
1160impl RecordFlag {
1161 #[must_use]
1163 pub fn matches(self, value: u8) -> bool {
1164 (self as u8) & value != 0
1165 }
1166}
1167
1168#[repr(C)]
1170#[derive(
1171 Copy,
1172 Clone,
1173 Debug,
1174 Display,
1175 Hash,
1176 PartialEq,
1177 Eq,
1178 PartialOrd,
1179 Ord,
1180 AsRefStr,
1181 FromRepr,
1182 EnumIter,
1183 EnumString,
1184)]
1185#[strum(ascii_case_insensitive)]
1186#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1187#[cfg_attr(
1188 feature = "python",
1189 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1190)]
1191pub enum TimeInForce {
1192 Gtc = 1,
1194 Ioc = 2,
1196 Fok = 3,
1198 Gtd = 4,
1200 Day = 5,
1202 AtTheOpen = 6,
1204 AtTheClose = 7,
1206}
1207
1208#[repr(C)]
1210#[derive(
1211 Copy,
1212 Clone,
1213 Debug,
1214 Display,
1215 Hash,
1216 PartialEq,
1217 Eq,
1218 PartialOrd,
1219 Ord,
1220 AsRefStr,
1221 FromRepr,
1222 EnumIter,
1223 EnumString,
1224)]
1225#[strum(ascii_case_insensitive)]
1226#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1227#[cfg_attr(
1228 feature = "python",
1229 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1230)]
1231pub enum TradingState {
1232 Active = 1,
1234 Halted = 2,
1236 Reducing = 3,
1238}
1239
1240#[repr(C)]
1242#[derive(
1243 Copy,
1244 Clone,
1245 Debug,
1246 Default,
1247 Display,
1248 Hash,
1249 PartialEq,
1250 Eq,
1251 PartialOrd,
1252 Ord,
1253 AsRefStr,
1254 FromRepr,
1255 EnumIter,
1256 EnumString,
1257)]
1258#[strum(ascii_case_insensitive)]
1259#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1260#[cfg_attr(
1261 feature = "python",
1262 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1263)]
1264pub enum TrailingOffsetType {
1265 #[default]
1267 NoTrailingOffset = 0,
1268 Price = 1,
1270 BasisPoints = 2,
1272 Ticks = 3,
1274 PriceTier = 4,
1276}
1277
1278#[repr(C)]
1280#[derive(
1281 Copy,
1282 Clone,
1283 Debug,
1284 Default,
1285 Display,
1286 Hash,
1287 PartialEq,
1288 Eq,
1289 PartialOrd,
1290 Ord,
1291 AsRefStr,
1292 FromRepr,
1293 EnumIter,
1294 EnumString,
1295)]
1296#[strum(ascii_case_insensitive)]
1297#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1298#[cfg_attr(
1299 feature = "python",
1300 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1301)]
1302pub enum TriggerType {
1303 #[default]
1305 NoTrigger = 0,
1306 Default = 1,
1308 LastPrice = 2,
1310 MarkPrice = 3,
1312 IndexPrice = 4,
1314 BidAsk = 5,
1316 DoubleLast = 6,
1318 DoubleBidAsk = 7,
1320 LastOrBidAsk = 8,
1322 MidPoint = 9,
1324}
1325
1326enum_strum_serde!(AccountType);
1327enum_strum_serde!(AggregationSource);
1328enum_strum_serde!(AggressorSide);
1329enum_strum_serde!(AssetClass);
1330enum_strum_serde!(InstrumentClass);
1331enum_strum_serde!(BarAggregation);
1332enum_strum_serde!(BarIntervalType);
1333enum_strum_serde!(BookAction);
1334enum_strum_serde!(BookType);
1335enum_strum_serde!(ContingencyType);
1336enum_strum_serde!(CurrencyType);
1337enum_strum_serde!(InstrumentCloseType);
1338enum_strum_serde!(LiquiditySide);
1339enum_strum_serde!(MarketStatus);
1340enum_strum_serde!(MarketStatusAction);
1341enum_strum_serde!(OmsType);
1342enum_strum_serde!(OptionKind);
1343enum_strum_serde!(OrderSide);
1344enum_strum_serde!(OrderSideSpecified);
1345enum_strum_serde!(OrderStatus);
1346enum_strum_serde!(OrderType);
1347enum_strum_serde!(PositionSide);
1348enum_strum_serde!(PriceType);
1349enum_strum_serde!(RecordFlag);
1350enum_strum_serde!(TimeInForce);
1351enum_strum_serde!(TradingState);
1352enum_strum_serde!(TrailingOffsetType);
1353enum_strum_serde!(TriggerType);