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 {
385 match side {
386 OrderSide::Buy => BetSide::Back,
387 OrderSide::Sell => BetSide::Lay,
388 OrderSide::NoOrderSide => panic!("Invalid `OrderSide` for `BetSide`, was {side}"),
389 }
390 }
391}
392
393#[repr(C)]
395#[derive(
396 Copy,
397 Clone,
398 Debug,
399 Display,
400 Hash,
401 PartialEq,
402 Eq,
403 PartialOrd,
404 Ord,
405 AsRefStr,
406 FromRepr,
407 EnumIter,
408 EnumString,
409)]
410#[strum(ascii_case_insensitive)]
411#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
412#[cfg_attr(
413 feature = "python",
414 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
415)]
416pub enum BookAction {
417 Add = 1,
419 Update = 2,
421 Delete = 3,
423 Clear = 4,
425}
426
427impl FromU8 for BookAction {
428 fn from_u8(value: u8) -> Option<Self> {
429 match value {
430 1 => Some(Self::Add),
431 2 => Some(Self::Update),
432 3 => Some(Self::Delete),
433 4 => Some(Self::Clear),
434 _ => None,
435 }
436 }
437}
438
439#[repr(C)]
441#[derive(
442 Copy,
443 Clone,
444 Debug,
445 Display,
446 Hash,
447 PartialEq,
448 Eq,
449 PartialOrd,
450 Ord,
451 AsRefStr,
452 FromRepr,
453 EnumIter,
454 EnumString,
455)]
456#[strum(ascii_case_insensitive)]
457#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
458#[allow(non_camel_case_types)]
459#[cfg_attr(
460 feature = "python",
461 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
462)]
463pub enum BookType {
464 L1_MBP = 1,
466 L2_MBP = 2,
468 L3_MBO = 3,
470}
471
472impl FromU8 for BookType {
473 fn from_u8(value: u8) -> Option<Self> {
474 match value {
475 1 => Some(Self::L1_MBP),
476 2 => Some(Self::L2_MBP),
477 3 => Some(Self::L3_MBO),
478 _ => None,
479 }
480 }
481}
482
483#[repr(C)]
487#[derive(
488 Copy,
489 Clone,
490 Debug,
491 Default,
492 Display,
493 Hash,
494 PartialEq,
495 Eq,
496 PartialOrd,
497 Ord,
498 AsRefStr,
499 FromRepr,
500 EnumIter,
501 EnumString,
502)]
503#[strum(ascii_case_insensitive)]
504#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
505#[cfg_attr(
506 feature = "python",
507 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
508)]
509pub enum ContingencyType {
510 #[default]
512 NoContingency = 0,
513 Oco = 1,
515 Oto = 2,
517 Ouo = 3,
519}
520
521#[repr(C)]
523#[derive(
524 Copy,
525 Clone,
526 Debug,
527 Display,
528 Hash,
529 PartialEq,
530 Eq,
531 PartialOrd,
532 Ord,
533 AsRefStr,
534 FromRepr,
535 EnumIter,
536 EnumString,
537)]
538#[strum(ascii_case_insensitive)]
539#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
540#[cfg_attr(
541 feature = "python",
542 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
543)]
544pub enum CurrencyType {
545 Crypto = 1,
547 Fiat = 2,
549 CommodityBacked = 3,
551}
552
553#[repr(C)]
555#[derive(
556 Copy,
557 Clone,
558 Debug,
559 Display,
560 Hash,
561 PartialEq,
562 Eq,
563 PartialOrd,
564 Ord,
565 AsRefStr,
566 FromRepr,
567 EnumIter,
568 EnumString,
569)]
570#[strum(ascii_case_insensitive)]
571#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
572#[cfg_attr(
573 feature = "python",
574 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
575)]
576pub enum InstrumentCloseType {
577 EndOfSession = 1,
579 ContractExpired = 2,
581}
582
583#[repr(C)]
585#[derive(
586 Copy,
587 Clone,
588 Debug,
589 Display,
590 Hash,
591 PartialEq,
592 Eq,
593 PartialOrd,
594 Ord,
595 AsRefStr,
596 FromRepr,
597 EnumIter,
598 EnumString,
599)]
600#[strum(ascii_case_insensitive)]
601#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
602#[cfg_attr(
603 feature = "python",
604 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
605)]
606#[allow(clippy::enum_variant_names)]
607pub enum LiquiditySide {
608 NoLiquiditySide = 0,
610 Maker = 1,
612 Taker = 2,
614}
615
616#[repr(C)]
618#[derive(
619 Copy,
620 Clone,
621 Debug,
622 Display,
623 Hash,
624 PartialEq,
625 Eq,
626 PartialOrd,
627 Ord,
628 AsRefStr,
629 FromRepr,
630 EnumIter,
631 EnumString,
632)]
633#[strum(ascii_case_insensitive)]
634#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
635#[cfg_attr(
636 feature = "python",
637 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
638)]
639pub enum MarketStatus {
640 Open = 1,
642 Closed = 2,
644 Paused = 3,
646 Suspended = 5,
650 NotAvailable = 6,
652}
653
654#[repr(C)]
656#[derive(
657 Copy,
658 Clone,
659 Debug,
660 Display,
661 Hash,
662 PartialEq,
663 Eq,
664 PartialOrd,
665 Ord,
666 AsRefStr,
667 FromRepr,
668 EnumIter,
669 EnumString,
670)]
671#[strum(ascii_case_insensitive)]
672#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
673#[cfg_attr(
674 feature = "python",
675 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
676)]
677pub enum MarketStatusAction {
678 None = 0,
680 PreOpen = 1,
682 PreCross = 2,
684 Quoting = 3,
686 Cross = 4,
688 Rotation = 5,
690 NewPriceIndication = 6,
692 Trading = 7,
694 Halt = 8,
696 Pause = 9,
698 Suspend = 10,
700 PreClose = 11,
702 Close = 12,
704 PostClose = 13,
706 ShortSellRestrictionChange = 14,
708 NotAvailableForTrading = 15,
710}
711
712impl FromU16 for MarketStatusAction {
714 fn from_u16(value: u16) -> Option<Self> {
715 match value {
716 0 => Some(Self::None),
717 1 => Some(Self::PreOpen),
718 2 => Some(Self::PreCross),
719 3 => Some(Self::Quoting),
720 4 => Some(Self::Cross),
721 5 => Some(Self::Rotation),
722 6 => Some(Self::NewPriceIndication),
723 7 => Some(Self::Trading),
724 8 => Some(Self::Halt),
725 9 => Some(Self::Pause),
726 10 => Some(Self::Suspend),
727 11 => Some(Self::PreClose),
728 12 => Some(Self::Close),
729 13 => Some(Self::PostClose),
730 14 => Some(Self::ShortSellRestrictionChange),
731 15 => Some(Self::NotAvailableForTrading),
732 _ => None,
733 }
734 }
735}
736
737#[repr(C)]
739#[derive(
740 Copy,
741 Clone,
742 Debug,
743 Default,
744 Display,
745 Hash,
746 PartialEq,
747 Eq,
748 PartialOrd,
749 Ord,
750 AsRefStr,
751 FromRepr,
752 EnumIter,
753 EnumString,
754)]
755#[strum(ascii_case_insensitive)]
756#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
757#[cfg_attr(
758 feature = "python",
759 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
760)]
761pub enum OmsType {
762 #[default]
764 Unspecified = 0,
765 Netting = 1,
767 Hedging = 2,
771}
772
773#[repr(C)]
775#[derive(
776 Copy,
777 Clone,
778 Debug,
779 Display,
780 Hash,
781 PartialEq,
782 Eq,
783 PartialOrd,
784 Ord,
785 AsRefStr,
786 FromRepr,
787 EnumIter,
788 EnumString,
789)]
790#[strum(ascii_case_insensitive)]
791#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
792#[cfg_attr(
793 feature = "python",
794 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
795)]
796pub enum OptionKind {
797 Call = 1,
799 Put = 2,
801}
802
803#[repr(C)]
805#[derive(
806 Copy,
807 Clone,
808 Debug,
809 Default,
810 Display,
811 Hash,
812 PartialEq,
813 Eq,
814 PartialOrd,
815 Ord,
816 AsRefStr,
817 FromRepr,
818 EnumIter,
819 EnumString,
820)]
821#[strum(ascii_case_insensitive)]
822#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
823#[allow(clippy::enum_variant_names)]
824#[cfg_attr(
825 feature = "python",
826 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
827)]
828pub enum OrderSide {
829 #[default]
831 NoOrderSide = 0,
832 Buy = 1,
834 Sell = 2,
836}
837
838impl OrderSide {
839 #[must_use]
840 pub fn as_specified(&self) -> OrderSideSpecified {
841 match &self {
842 Self::Buy => OrderSideSpecified::Buy,
843 Self::Sell => OrderSideSpecified::Sell,
844 _ => panic!("Order invariant failed: side must be `Buy` or `Sell`"),
845 }
846 }
847}
848
849impl FromU8 for OrderSide {
851 fn from_u8(value: u8) -> Option<Self> {
852 match value {
853 0 => Some(Self::NoOrderSide),
854 1 => Some(Self::Buy),
855 2 => Some(Self::Sell),
856 _ => None,
857 }
858 }
859}
860
861#[repr(C)]
863#[derive(
864 Copy,
865 Clone,
866 Debug,
867 Display,
868 Hash,
869 PartialEq,
870 Eq,
871 PartialOrd,
872 Ord,
873 AsRefStr,
874 FromRepr,
875 EnumIter,
876 EnumString,
877)]
878#[strum(ascii_case_insensitive)]
879#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
880#[allow(clippy::enum_variant_names)]
881pub enum OrderSideSpecified {
882 Buy = 1,
884 Sell = 2,
886}
887
888impl OrderSideSpecified {
889 #[must_use]
891 pub fn opposite(&self) -> Self {
892 match &self {
893 Self::Buy => Self::Sell,
894 Self::Sell => Self::Buy,
895 }
896 }
897
898 #[must_use]
900 pub fn as_order_side(&self) -> OrderSide {
901 match &self {
902 Self::Buy => OrderSide::Buy,
903 Self::Sell => OrderSide::Sell,
904 }
905 }
906}
907
908#[repr(C)]
929#[derive(
930 Copy,
931 Clone,
932 Debug,
933 Display,
934 Hash,
935 PartialEq,
936 Eq,
937 PartialOrd,
938 Ord,
939 AsRefStr,
940 FromRepr,
941 EnumIter,
942 EnumString,
943)]
944#[strum(ascii_case_insensitive)]
945#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
946#[cfg_attr(
947 feature = "python",
948 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
949)]
950pub enum OrderStatus {
951 Initialized = 1,
953 Denied = 2,
955 Emulated = 3,
957 Released = 4,
959 Submitted = 5,
961 Accepted = 6,
963 Rejected = 7,
965 Canceled = 8,
967 Expired = 9,
969 Triggered = 10,
971 PendingUpdate = 11,
973 PendingCancel = 12,
975 PartiallyFilled = 13,
977 Filled = 14,
979}
980
981#[repr(C)]
983#[derive(
984 Copy,
985 Clone,
986 Debug,
987 Display,
988 Hash,
989 PartialEq,
990 Eq,
991 PartialOrd,
992 Ord,
993 AsRefStr,
994 FromRepr,
995 EnumIter,
996 EnumString,
997)]
998#[strum(ascii_case_insensitive)]
999#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1000#[cfg_attr(
1001 feature = "python",
1002 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1003)]
1004pub enum OrderType {
1005 Market = 1,
1007 Limit = 2,
1009 StopMarket = 3,
1011 StopLimit = 4,
1013 MarketToLimit = 5,
1015 MarketIfTouched = 6,
1017 LimitIfTouched = 7,
1019 TrailingStopMarket = 8,
1021 TrailingStopLimit = 9,
1023}
1024
1025#[repr(C)]
1027#[derive(
1028 Copy,
1029 Clone,
1030 Debug,
1031 Default,
1032 Display,
1033 Hash,
1034 PartialEq,
1035 Eq,
1036 PartialOrd,
1037 Ord,
1038 AsRefStr,
1039 FromRepr,
1040 EnumIter,
1041 EnumString,
1042)]
1043#[strum(ascii_case_insensitive)]
1044#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1045#[allow(clippy::enum_variant_names)]
1046#[cfg_attr(
1047 feature = "python",
1048 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1049)]
1050pub enum PositionSide {
1051 #[default]
1053 NoPositionSide = 0,
1054 Flat = 1,
1056 Long = 2,
1058 Short = 3,
1060}
1061
1062#[repr(C)]
1064#[derive(
1065 Copy,
1066 Clone,
1067 Debug,
1068 Display,
1069 Hash,
1070 PartialEq,
1071 Eq,
1072 PartialOrd,
1073 Ord,
1074 AsRefStr,
1075 FromRepr,
1076 EnumIter,
1077 EnumString,
1078)]
1079#[strum(ascii_case_insensitive)]
1080#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1081#[cfg_attr(
1082 feature = "python",
1083 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1084)]
1085pub enum PriceType {
1086 Bid = 1,
1088 Ask = 2,
1090 Mid = 3,
1092 Last = 4,
1094}
1095
1096#[repr(C)]
1098#[derive(
1099 Copy,
1100 Clone,
1101 Debug,
1102 Display,
1103 Hash,
1104 PartialEq,
1105 Eq,
1106 PartialOrd,
1107 Ord,
1108 AsRefStr,
1109 FromRepr,
1110 EnumIter,
1111 EnumString,
1112)]
1113#[strum(ascii_case_insensitive)]
1114#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1115#[cfg_attr(
1116 feature = "python",
1117 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1118)]
1119#[allow(non_camel_case_types)]
1120pub enum RecordFlag {
1121 F_LAST = 1 << 7, F_TOB = 1 << 6, F_SNAPSHOT = 1 << 5, F_MBP = 1 << 4, RESERVED_2 = 1 << 3, RESERVED_1 = 1 << 2, }
1134
1135impl RecordFlag {
1136 #[must_use]
1138 pub fn matches(self, value: u8) -> bool {
1139 (self as u8) & value != 0
1140 }
1141}
1142
1143#[repr(C)]
1145#[derive(
1146 Copy,
1147 Clone,
1148 Debug,
1149 Display,
1150 Hash,
1151 PartialEq,
1152 Eq,
1153 PartialOrd,
1154 Ord,
1155 AsRefStr,
1156 FromRepr,
1157 EnumIter,
1158 EnumString,
1159)]
1160#[strum(ascii_case_insensitive)]
1161#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1162#[cfg_attr(
1163 feature = "python",
1164 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1165)]
1166pub enum TimeInForce {
1167 Gtc = 1,
1169 Ioc = 2,
1171 Fok = 3,
1173 Gtd = 4,
1175 Day = 5,
1177 AtTheOpen = 6,
1179 AtTheClose = 7,
1181}
1182
1183#[repr(C)]
1185#[derive(
1186 Copy,
1187 Clone,
1188 Debug,
1189 Display,
1190 Hash,
1191 PartialEq,
1192 Eq,
1193 PartialOrd,
1194 Ord,
1195 AsRefStr,
1196 FromRepr,
1197 EnumIter,
1198 EnumString,
1199)]
1200#[strum(ascii_case_insensitive)]
1201#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1202#[cfg_attr(
1203 feature = "python",
1204 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1205)]
1206pub enum TradingState {
1207 Active = 1,
1209 Halted = 2,
1211 Reducing = 3,
1213}
1214
1215#[repr(C)]
1217#[derive(
1218 Copy,
1219 Clone,
1220 Debug,
1221 Default,
1222 Display,
1223 Hash,
1224 PartialEq,
1225 Eq,
1226 PartialOrd,
1227 Ord,
1228 AsRefStr,
1229 FromRepr,
1230 EnumIter,
1231 EnumString,
1232)]
1233#[strum(ascii_case_insensitive)]
1234#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1235#[cfg_attr(
1236 feature = "python",
1237 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1238)]
1239pub enum TrailingOffsetType {
1240 #[default]
1242 NoTrailingOffset = 0,
1243 Price = 1,
1245 BasisPoints = 2,
1247 Ticks = 3,
1249 PriceTier = 4,
1251}
1252
1253#[repr(C)]
1255#[derive(
1256 Copy,
1257 Clone,
1258 Debug,
1259 Default,
1260 Display,
1261 Hash,
1262 PartialEq,
1263 Eq,
1264 PartialOrd,
1265 Ord,
1266 AsRefStr,
1267 FromRepr,
1268 EnumIter,
1269 EnumString,
1270)]
1271#[strum(ascii_case_insensitive)]
1272#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1273#[cfg_attr(
1274 feature = "python",
1275 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1276)]
1277pub enum TriggerType {
1278 #[default]
1280 NoTrigger = 0,
1281 Default = 1,
1283 LastPrice = 2,
1285 MarkPrice = 3,
1287 IndexPrice = 4,
1289 BidAsk = 5,
1291 DoubleLast = 6,
1293 DoubleBidAsk = 7,
1295 LastOrBidAsk = 8,
1297 MidPoint = 9,
1299}
1300
1301enum_strum_serde!(AccountType);
1302enum_strum_serde!(AggregationSource);
1303enum_strum_serde!(AggressorSide);
1304enum_strum_serde!(AssetClass);
1305enum_strum_serde!(InstrumentClass);
1306enum_strum_serde!(BarAggregation);
1307enum_strum_serde!(BarIntervalType);
1308enum_strum_serde!(BookAction);
1309enum_strum_serde!(BookType);
1310enum_strum_serde!(ContingencyType);
1311enum_strum_serde!(CurrencyType);
1312enum_strum_serde!(InstrumentCloseType);
1313enum_strum_serde!(LiquiditySide);
1314enum_strum_serde!(MarketStatus);
1315enum_strum_serde!(MarketStatusAction);
1316enum_strum_serde!(OmsType);
1317enum_strum_serde!(OptionKind);
1318enum_strum_serde!(OrderSide);
1319enum_strum_serde!(OrderStatus);
1320enum_strum_serde!(OrderType);
1321enum_strum_serde!(PositionSide);
1322enum_strum_serde!(PriceType);
1323enum_strum_serde!(RecordFlag);
1324enum_strum_serde!(TimeInForce);
1325enum_strum_serde!(TradingState);
1326enum_strum_serde!(TrailingOffsetType);
1327enum_strum_serde!(TriggerType);