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 {
27 fn from_u8(value: u8) -> Option<Self>
31 where
32 Self: Sized;
33}
34
35pub trait FromU16 {
37 fn from_u16(value: u16) -> Option<Self>
41 where
42 Self: Sized;
43}
44
45#[repr(C)]
47#[derive(
48 Copy,
49 Clone,
50 Debug,
51 Display,
52 Hash,
53 PartialEq,
54 Eq,
55 PartialOrd,
56 Ord,
57 AsRefStr,
58 FromRepr,
59 EnumIter,
60 EnumString,
61)]
62#[strum(ascii_case_insensitive)]
63#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
64#[cfg_attr(
65 feature = "python",
66 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
67)]
68pub enum AccountType {
69 Cash = 1,
71 Margin = 2,
73 Betting = 3,
75}
76
77#[repr(C)]
79#[derive(
80 Copy,
81 Clone,
82 Debug,
83 Display,
84 Hash,
85 PartialEq,
86 Eq,
87 PartialOrd,
88 Ord,
89 AsRefStr,
90 FromRepr,
91 EnumIter,
92 EnumString,
93)]
94#[strum(ascii_case_insensitive)]
95#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
96#[cfg_attr(
97 feature = "python",
98 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
99)]
100pub enum AggregationSource {
101 External = 1,
103 Internal = 2,
105}
106
107#[repr(C)]
109#[derive(
110 Copy,
111 Clone,
112 Debug,
113 Default,
114 Display,
115 Hash,
116 PartialEq,
117 Eq,
118 PartialOrd,
119 Ord,
120 AsRefStr,
121 FromRepr,
122 EnumIter,
123 EnumString,
124)]
125#[strum(ascii_case_insensitive)]
126#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
127#[cfg_attr(
128 feature = "python",
129 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
130)]
131pub enum AggressorSide {
132 #[default]
134 NoAggressor = 0,
135 Buyer = 1,
137 Seller = 2,
139}
140
141impl FromU8 for AggressorSide {
142 fn from_u8(value: u8) -> Option<Self> {
143 match value {
144 0 => Some(Self::NoAggressor),
145 1 => Some(Self::Buyer),
146 2 => Some(Self::Seller),
147 _ => None,
148 }
149 }
150}
151
152#[repr(C)]
154#[derive(
155 Copy,
156 Clone,
157 Debug,
158 Display,
159 Hash,
160 PartialEq,
161 Eq,
162 PartialOrd,
163 Ord,
164 AsRefStr,
165 FromRepr,
166 EnumIter,
167 EnumString,
168)]
169#[strum(ascii_case_insensitive)]
170#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
171#[cfg_attr(
172 feature = "python",
173 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
174)]
175#[allow(non_camel_case_types)]
176pub enum AssetClass {
177 FX = 1,
179 Equity = 2,
181 Commodity = 3,
183 Debt = 4,
185 Index = 5,
187 Cryptocurrency = 6,
189 Alternative = 7,
191}
192
193impl FromU8 for AssetClass {
194 fn from_u8(value: u8) -> Option<Self> {
195 match value {
196 1 => Some(Self::FX),
197 2 => Some(Self::Equity),
198 3 => Some(Self::Commodity),
199 4 => Some(Self::Debt),
200 5 => Some(Self::Index),
201 6 => Some(Self::Cryptocurrency),
202 7 => Some(Self::Alternative),
203 _ => None,
204 }
205 }
206}
207
208#[repr(C)]
210#[derive(
211 Copy,
212 Clone,
213 Debug,
214 Display,
215 Hash,
216 PartialEq,
217 Eq,
218 PartialOrd,
219 Ord,
220 AsRefStr,
221 FromRepr,
222 EnumIter,
223 EnumString,
224)]
225#[strum(ascii_case_insensitive)]
226#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
227#[cfg_attr(
228 feature = "python",
229 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
230)]
231pub enum InstrumentClass {
232 Spot = 1,
234 Swap = 2,
236 Future = 3,
238 FuturesSpread = 4,
240 Forward = 5,
242 Cfd = 6,
244 Bond = 7,
246 Option = 8,
248 OptionSpread = 9,
250 Warrant = 10,
252 SportsBetting = 11,
254 BinaryOption = 12,
257}
258
259#[repr(C)]
261#[derive(
262 Copy,
263 Clone,
264 Debug,
265 Display,
266 Hash,
267 PartialEq,
268 Eq,
269 PartialOrd,
270 Ord,
271 AsRefStr,
272 FromRepr,
273 EnumIter,
274 EnumString,
275)]
276#[strum(ascii_case_insensitive)]
277#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
278#[cfg_attr(
279 feature = "python",
280 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
281)]
282pub enum BarAggregation {
283 Tick = 1,
285 TickImbalance = 2,
287 TickRuns = 3,
289 Volume = 4,
291 VolumeImbalance = 5,
293 VolumeRuns = 6,
295 Value = 7,
297 ValueImbalance = 8,
299 ValueRuns = 9,
301 Millisecond = 10,
303 Second = 11,
305 Minute = 12,
307 Hour = 13,
309 Day = 14,
311 Week = 15,
313 Month = 16,
315 Year = 17,
317}
318
319#[repr(C)]
321#[derive(
322 Copy,
323 Clone,
324 Debug,
325 Default,
326 Display,
327 Hash,
328 PartialEq,
329 Eq,
330 PartialOrd,
331 Ord,
332 AsRefStr,
333 FromRepr,
334 EnumIter,
335 EnumString,
336)]
337#[strum(ascii_case_insensitive)]
338#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
339#[cfg_attr(
340 feature = "python",
341 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
342)]
343pub enum BarIntervalType {
344 #[default]
346 LeftOpen = 1,
347 RightOpen = 2,
349}
350
351#[repr(C)]
353#[derive(
354 Copy,
355 Clone,
356 Debug,
357 Display,
358 Hash,
359 PartialEq,
360 Eq,
361 PartialOrd,
362 Ord,
363 AsRefStr,
364 FromRepr,
365 EnumIter,
366 EnumString,
367)]
368#[strum(ascii_case_insensitive)]
369#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
370#[cfg_attr(
371 feature = "python",
372 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
373)]
374pub enum BetSide {
375 Back = 1,
377 Lay = 2,
379}
380
381impl BetSide {
382 #[must_use]
384 pub fn opposite(&self) -> Self {
385 match self {
386 Self::Back => Self::Lay,
387 Self::Lay => Self::Back,
388 }
389 }
390}
391
392impl From<OrderSide> for BetSide {
393 fn from(side: OrderSide) -> Self {
399 match side {
400 OrderSide::Buy => BetSide::Back,
401 OrderSide::Sell => BetSide::Lay,
402 OrderSide::NoOrderSide => panic!("Invalid `OrderSide` for `BetSide`, was {side}"),
403 }
404 }
405}
406
407#[repr(C)]
409#[derive(
410 Copy,
411 Clone,
412 Debug,
413 Display,
414 Hash,
415 PartialEq,
416 Eq,
417 PartialOrd,
418 Ord,
419 AsRefStr,
420 FromRepr,
421 EnumIter,
422 EnumString,
423)]
424#[strum(ascii_case_insensitive)]
425#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
426#[cfg_attr(
427 feature = "python",
428 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
429)]
430pub enum BookAction {
431 Add = 1,
433 Update = 2,
435 Delete = 3,
437 Clear = 4,
439}
440
441impl FromU8 for BookAction {
442 fn from_u8(value: u8) -> Option<Self> {
443 match value {
444 1 => Some(Self::Add),
445 2 => Some(Self::Update),
446 3 => Some(Self::Delete),
447 4 => Some(Self::Clear),
448 _ => None,
449 }
450 }
451}
452
453#[repr(C)]
455#[derive(
456 Copy,
457 Clone,
458 Debug,
459 Display,
460 Hash,
461 PartialEq,
462 Eq,
463 PartialOrd,
464 Ord,
465 AsRefStr,
466 FromRepr,
467 EnumIter,
468 EnumString,
469)]
470#[strum(ascii_case_insensitive)]
471#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
472#[allow(non_camel_case_types)]
473#[cfg_attr(
474 feature = "python",
475 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
476)]
477pub enum BookType {
478 L1_MBP = 1,
480 L2_MBP = 2,
482 L3_MBO = 3,
484}
485
486impl FromU8 for BookType {
487 fn from_u8(value: u8) -> Option<Self> {
488 match value {
489 1 => Some(Self::L1_MBP),
490 2 => Some(Self::L2_MBP),
491 3 => Some(Self::L3_MBO),
492 _ => None,
493 }
494 }
495}
496
497#[repr(C)]
501#[derive(
502 Copy,
503 Clone,
504 Debug,
505 Default,
506 Display,
507 Hash,
508 PartialEq,
509 Eq,
510 PartialOrd,
511 Ord,
512 AsRefStr,
513 FromRepr,
514 EnumIter,
515 EnumString,
516)]
517#[strum(ascii_case_insensitive)]
518#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
519#[cfg_attr(
520 feature = "python",
521 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
522)]
523pub enum ContingencyType {
524 #[default]
526 NoContingency = 0,
527 Oco = 1,
529 Oto = 2,
531 Ouo = 3,
533}
534
535#[repr(C)]
537#[derive(
538 Copy,
539 Clone,
540 Debug,
541 Display,
542 Hash,
543 PartialEq,
544 Eq,
545 PartialOrd,
546 Ord,
547 AsRefStr,
548 FromRepr,
549 EnumIter,
550 EnumString,
551)]
552#[strum(ascii_case_insensitive)]
553#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
554#[cfg_attr(
555 feature = "python",
556 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
557)]
558pub enum CurrencyType {
559 Crypto = 1,
561 Fiat = 2,
563 CommodityBacked = 3,
565}
566
567#[repr(C)]
569#[derive(
570 Copy,
571 Clone,
572 Debug,
573 Display,
574 Hash,
575 PartialEq,
576 Eq,
577 PartialOrd,
578 Ord,
579 AsRefStr,
580 FromRepr,
581 EnumIter,
582 EnumString,
583)]
584#[strum(ascii_case_insensitive)]
585#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
586#[cfg_attr(
587 feature = "python",
588 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
589)]
590pub enum InstrumentCloseType {
591 EndOfSession = 1,
593 ContractExpired = 2,
595}
596
597impl FromU8 for InstrumentCloseType {
599 fn from_u8(value: u8) -> Option<Self> {
600 match value {
601 1 => Some(Self::EndOfSession),
602 2 => Some(Self::ContractExpired),
603 _ => None,
604 }
605 }
606}
607
608#[repr(C)]
610#[derive(
611 Copy,
612 Clone,
613 Debug,
614 Display,
615 Hash,
616 PartialEq,
617 Eq,
618 PartialOrd,
619 Ord,
620 AsRefStr,
621 FromRepr,
622 EnumIter,
623 EnumString,
624)]
625#[strum(ascii_case_insensitive)]
626#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
627#[cfg_attr(
628 feature = "python",
629 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
630)]
631#[allow(clippy::enum_variant_names)]
632pub enum LiquiditySide {
633 NoLiquiditySide = 0,
635 Maker = 1,
637 Taker = 2,
639}
640
641#[repr(C)]
643#[derive(
644 Copy,
645 Clone,
646 Debug,
647 Display,
648 Hash,
649 PartialEq,
650 Eq,
651 PartialOrd,
652 Ord,
653 AsRefStr,
654 FromRepr,
655 EnumIter,
656 EnumString,
657)]
658#[strum(ascii_case_insensitive)]
659#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
660#[cfg_attr(
661 feature = "python",
662 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
663)]
664pub enum MarketStatus {
665 Open = 1,
667 Closed = 2,
669 Paused = 3,
671 Suspended = 5,
675 NotAvailable = 6,
677}
678
679#[repr(C)]
681#[derive(
682 Copy,
683 Clone,
684 Debug,
685 Display,
686 Hash,
687 PartialEq,
688 Eq,
689 PartialOrd,
690 Ord,
691 AsRefStr,
692 FromRepr,
693 EnumIter,
694 EnumString,
695)]
696#[strum(ascii_case_insensitive)]
697#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
698#[cfg_attr(
699 feature = "python",
700 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
701)]
702pub enum MarketStatusAction {
703 None = 0,
705 PreOpen = 1,
707 PreCross = 2,
709 Quoting = 3,
711 Cross = 4,
713 Rotation = 5,
715 NewPriceIndication = 6,
717 Trading = 7,
719 Halt = 8,
721 Pause = 9,
723 Suspend = 10,
725 PreClose = 11,
727 Close = 12,
729 PostClose = 13,
731 ShortSellRestrictionChange = 14,
733 NotAvailableForTrading = 15,
735}
736
737impl FromU16 for MarketStatusAction {
739 fn from_u16(value: u16) -> Option<Self> {
740 match value {
741 0 => Some(Self::None),
742 1 => Some(Self::PreOpen),
743 2 => Some(Self::PreCross),
744 3 => Some(Self::Quoting),
745 4 => Some(Self::Cross),
746 5 => Some(Self::Rotation),
747 6 => Some(Self::NewPriceIndication),
748 7 => Some(Self::Trading),
749 8 => Some(Self::Halt),
750 9 => Some(Self::Pause),
751 10 => Some(Self::Suspend),
752 11 => Some(Self::PreClose),
753 12 => Some(Self::Close),
754 13 => Some(Self::PostClose),
755 14 => Some(Self::ShortSellRestrictionChange),
756 15 => Some(Self::NotAvailableForTrading),
757 _ => None,
758 }
759 }
760}
761
762#[repr(C)]
764#[derive(
765 Copy,
766 Clone,
767 Debug,
768 Default,
769 Display,
770 Hash,
771 PartialEq,
772 Eq,
773 PartialOrd,
774 Ord,
775 AsRefStr,
776 FromRepr,
777 EnumIter,
778 EnumString,
779)]
780#[strum(ascii_case_insensitive)]
781#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
782#[cfg_attr(
783 feature = "python",
784 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
785)]
786pub enum OmsType {
787 #[default]
789 Unspecified = 0,
790 Netting = 1,
792 Hedging = 2,
796}
797
798#[repr(C)]
800#[derive(
801 Copy,
802 Clone,
803 Debug,
804 Display,
805 Hash,
806 PartialEq,
807 Eq,
808 PartialOrd,
809 Ord,
810 AsRefStr,
811 FromRepr,
812 EnumIter,
813 EnumString,
814)]
815#[strum(ascii_case_insensitive)]
816#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
817#[cfg_attr(
818 feature = "python",
819 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
820)]
821pub enum OptionKind {
822 Call = 1,
824 Put = 2,
826}
827
828#[repr(C)]
830#[derive(
831 Copy,
832 Clone,
833 Debug,
834 Default,
835 Display,
836 Hash,
837 PartialEq,
838 Eq,
839 PartialOrd,
840 Ord,
841 AsRefStr,
842 FromRepr,
843 EnumIter,
844 EnumString,
845)]
846#[strum(ascii_case_insensitive)]
847#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
848#[allow(clippy::enum_variant_names)]
849#[cfg_attr(
850 feature = "python",
851 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
852)]
853pub enum OrderSide {
854 #[default]
856 NoOrderSide = 0,
857 Buy = 1,
859 Sell = 2,
861}
862
863impl OrderSide {
864 #[must_use]
870 pub fn as_specified(&self) -> OrderSideSpecified {
871 match &self {
872 Self::Buy => OrderSideSpecified::Buy,
873 Self::Sell => OrderSideSpecified::Sell,
874 _ => panic!("Order invariant failed: side must be `Buy` or `Sell`"),
875 }
876 }
877}
878
879impl FromU8 for OrderSide {
881 fn from_u8(value: u8) -> Option<Self> {
882 match value {
883 0 => Some(Self::NoOrderSide),
884 1 => Some(Self::Buy),
885 2 => Some(Self::Sell),
886 _ => None,
887 }
888 }
889}
890
891#[repr(C)]
893#[derive(
894 Copy,
895 Clone,
896 Debug,
897 Display,
898 Hash,
899 PartialEq,
900 Eq,
901 PartialOrd,
902 Ord,
903 AsRefStr,
904 FromRepr,
905 EnumIter,
906 EnumString,
907)]
908#[strum(ascii_case_insensitive)]
909#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
910#[allow(clippy::enum_variant_names)]
911pub enum OrderSideSpecified {
912 Buy = 1,
914 Sell = 2,
916}
917
918impl OrderSideSpecified {
919 #[must_use]
921 pub fn opposite(&self) -> Self {
922 match &self {
923 Self::Buy => Self::Sell,
924 Self::Sell => Self::Buy,
925 }
926 }
927
928 #[must_use]
930 pub fn as_order_side(&self) -> OrderSide {
931 match &self {
932 Self::Buy => OrderSide::Buy,
933 Self::Sell => OrderSide::Sell,
934 }
935 }
936}
937
938#[repr(C)]
959#[derive(
960 Copy,
961 Clone,
962 Debug,
963 Display,
964 Hash,
965 PartialEq,
966 Eq,
967 PartialOrd,
968 Ord,
969 AsRefStr,
970 FromRepr,
971 EnumIter,
972 EnumString,
973)]
974#[strum(ascii_case_insensitive)]
975#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
976#[cfg_attr(
977 feature = "python",
978 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
979)]
980pub enum OrderStatus {
981 Initialized = 1,
983 Denied = 2,
985 Emulated = 3,
987 Released = 4,
989 Submitted = 5,
991 Accepted = 6,
993 Rejected = 7,
995 Canceled = 8,
997 Expired = 9,
999 Triggered = 10,
1001 PendingUpdate = 11,
1003 PendingCancel = 12,
1005 PartiallyFilled = 13,
1007 Filled = 14,
1009}
1010
1011#[repr(C)]
1013#[derive(
1014 Copy,
1015 Clone,
1016 Debug,
1017 Display,
1018 Hash,
1019 PartialEq,
1020 Eq,
1021 PartialOrd,
1022 Ord,
1023 AsRefStr,
1024 FromRepr,
1025 EnumIter,
1026 EnumString,
1027)]
1028#[strum(ascii_case_insensitive)]
1029#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1030#[cfg_attr(
1031 feature = "python",
1032 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1033)]
1034pub enum OrderType {
1035 Market = 1,
1037 Limit = 2,
1039 StopMarket = 3,
1041 StopLimit = 4,
1043 MarketToLimit = 5,
1045 MarketIfTouched = 6,
1047 LimitIfTouched = 7,
1049 TrailingStopMarket = 8,
1051 TrailingStopLimit = 9,
1053}
1054
1055#[repr(C)]
1057#[derive(
1058 Copy,
1059 Clone,
1060 Debug,
1061 Default,
1062 Display,
1063 Hash,
1064 PartialEq,
1065 Eq,
1066 PartialOrd,
1067 Ord,
1068 AsRefStr,
1069 FromRepr,
1070 EnumIter,
1071 EnumString,
1072)]
1073#[strum(ascii_case_insensitive)]
1074#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1075#[allow(clippy::enum_variant_names)]
1076#[cfg_attr(
1077 feature = "python",
1078 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1079)]
1080pub enum PositionSide {
1081 #[default]
1083 NoPositionSide = 0,
1084 Flat = 1,
1086 Long = 2,
1088 Short = 3,
1090}
1091
1092impl PositionSide {
1093 #[must_use]
1099 pub fn as_specified(&self) -> PositionSideSpecified {
1100 match &self {
1101 Self::Long => PositionSideSpecified::Long,
1102 Self::Short => PositionSideSpecified::Short,
1103 Self::Flat => PositionSideSpecified::Flat,
1104 _ => panic!("Position invariant failed: side must be `Long`, `Short`, or `Flat`"),
1105 }
1106 }
1107}
1108
1109#[repr(C)]
1111#[derive(
1112 Copy,
1113 Clone,
1114 Debug,
1115 Display,
1116 Hash,
1117 PartialEq,
1118 Eq,
1119 PartialOrd,
1120 Ord,
1121 AsRefStr,
1122 FromRepr,
1123 EnumIter,
1124 EnumString,
1125)]
1126#[strum(ascii_case_insensitive)]
1127#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1128#[allow(clippy::enum_variant_names)]
1129#[cfg_attr(
1130 feature = "python",
1131 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1132)]
1133pub enum PositionSideSpecified {
1134 Flat = 1,
1136 Long = 2,
1138 Short = 3,
1140}
1141
1142impl PositionSideSpecified {
1143 #[must_use]
1145 pub fn as_position_side(&self) -> PositionSide {
1146 match &self {
1147 Self::Long => PositionSide::Long,
1148 Self::Short => PositionSide::Short,
1149 Self::Flat => PositionSide::Flat,
1150 }
1151 }
1152}
1153
1154#[repr(C)]
1156#[derive(
1157 Copy,
1158 Clone,
1159 Debug,
1160 Display,
1161 Hash,
1162 PartialEq,
1163 Eq,
1164 PartialOrd,
1165 Ord,
1166 AsRefStr,
1167 FromRepr,
1168 EnumIter,
1169 EnumString,
1170)]
1171#[strum(ascii_case_insensitive)]
1172#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1173#[cfg_attr(
1174 feature = "python",
1175 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1176)]
1177pub enum PriceType {
1178 Bid = 1,
1181 Ask = 2,
1184 Mid = 3,
1186 Last = 4,
1188 Mark = 5,
1191}
1192
1193#[repr(C)]
1195#[derive(
1196 Copy,
1197 Clone,
1198 Debug,
1199 Display,
1200 Hash,
1201 PartialEq,
1202 Eq,
1203 PartialOrd,
1204 Ord,
1205 AsRefStr,
1206 FromRepr,
1207 EnumIter,
1208 EnumString,
1209)]
1210#[strum(ascii_case_insensitive)]
1211#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1212#[cfg_attr(
1213 feature = "python",
1214 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1215)]
1216#[allow(non_camel_case_types)]
1217pub enum RecordFlag {
1218 F_LAST = 1 << 7, F_TOB = 1 << 6, F_SNAPSHOT = 1 << 5, F_MBP = 1 << 4, RESERVED_2 = 1 << 3, RESERVED_1 = 1 << 2, }
1231
1232impl RecordFlag {
1233 #[must_use]
1235 pub fn matches(self, value: u8) -> bool {
1236 (self as u8) & value != 0
1237 }
1238}
1239
1240#[repr(C)]
1242#[derive(
1243 Copy,
1244 Clone,
1245 Debug,
1246 Display,
1247 Hash,
1248 PartialEq,
1249 Eq,
1250 PartialOrd,
1251 Ord,
1252 AsRefStr,
1253 FromRepr,
1254 EnumIter,
1255 EnumString,
1256)]
1257#[strum(ascii_case_insensitive)]
1258#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1259#[cfg_attr(
1260 feature = "python",
1261 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1262)]
1263pub enum TimeInForce {
1264 Gtc = 1,
1266 Ioc = 2,
1268 Fok = 3,
1270 Gtd = 4,
1272 Day = 5,
1274 AtTheOpen = 6,
1276 AtTheClose = 7,
1278}
1279
1280#[repr(C)]
1282#[derive(
1283 Copy,
1284 Clone,
1285 Debug,
1286 Display,
1287 Hash,
1288 PartialEq,
1289 Eq,
1290 PartialOrd,
1291 Ord,
1292 AsRefStr,
1293 FromRepr,
1294 EnumIter,
1295 EnumString,
1296)]
1297#[strum(ascii_case_insensitive)]
1298#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1299#[cfg_attr(
1300 feature = "python",
1301 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1302)]
1303pub enum TradingState {
1304 Active = 1,
1306 Halted = 2,
1308 Reducing = 3,
1310}
1311
1312#[repr(C)]
1314#[derive(
1315 Copy,
1316 Clone,
1317 Debug,
1318 Default,
1319 Display,
1320 Hash,
1321 PartialEq,
1322 Eq,
1323 PartialOrd,
1324 Ord,
1325 AsRefStr,
1326 FromRepr,
1327 EnumIter,
1328 EnumString,
1329)]
1330#[strum(ascii_case_insensitive)]
1331#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1332#[cfg_attr(
1333 feature = "python",
1334 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1335)]
1336pub enum TrailingOffsetType {
1337 #[default]
1339 NoTrailingOffset = 0,
1340 Price = 1,
1342 BasisPoints = 2,
1344 Ticks = 3,
1346 PriceTier = 4,
1348}
1349
1350#[repr(C)]
1352#[derive(
1353 Copy,
1354 Clone,
1355 Debug,
1356 Default,
1357 Display,
1358 Hash,
1359 PartialEq,
1360 Eq,
1361 PartialOrd,
1362 Ord,
1363 AsRefStr,
1364 FromRepr,
1365 EnumIter,
1366 EnumString,
1367)]
1368#[strum(ascii_case_insensitive)]
1369#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
1370#[cfg_attr(
1371 feature = "python",
1372 pyo3::pyclass(eq, eq_int, module = "nautilus_trader.core.nautilus_pyo3.model.enums")
1373)]
1374pub enum TriggerType {
1375 #[default]
1377 NoTrigger = 0,
1378 Default = 1,
1380 LastPrice = 2,
1382 MarkPrice = 3,
1384 IndexPrice = 4,
1386 BidAsk = 5,
1388 DoubleLast = 6,
1390 DoubleBidAsk = 7,
1392 LastOrBidAsk = 8,
1394 MidPoint = 9,
1396}
1397
1398enum_strum_serde!(AccountType);
1399enum_strum_serde!(AggregationSource);
1400enum_strum_serde!(AggressorSide);
1401enum_strum_serde!(AssetClass);
1402enum_strum_serde!(InstrumentClass);
1403enum_strum_serde!(BarAggregation);
1404enum_strum_serde!(BarIntervalType);
1405enum_strum_serde!(BookAction);
1406enum_strum_serde!(BookType);
1407enum_strum_serde!(ContingencyType);
1408enum_strum_serde!(CurrencyType);
1409enum_strum_serde!(InstrumentCloseType);
1410enum_strum_serde!(LiquiditySide);
1411enum_strum_serde!(MarketStatus);
1412enum_strum_serde!(MarketStatusAction);
1413enum_strum_serde!(OmsType);
1414enum_strum_serde!(OptionKind);
1415enum_strum_serde!(OrderSide);
1416enum_strum_serde!(OrderSideSpecified);
1417enum_strum_serde!(OrderStatus);
1418enum_strum_serde!(OrderType);
1419enum_strum_serde!(PositionSide);
1420enum_strum_serde!(PositionSideSpecified);
1421enum_strum_serde!(PriceType);
1422enum_strum_serde!(RecordFlag);
1423enum_strum_serde!(TimeInForce);
1424enum_strum_serde!(TradingState);
1425enum_strum_serde!(TrailingOffsetType);
1426enum_strum_serde!(TriggerType);