bullet_exchange_interface/
types.rs1pub use rust_decimal::Decimal;
4
5use crate::string::CustomString;
6use crate::{define_enum, define_simple_enum, define_simple_type};
7
8pub const RESERVED_ORDER_ID: OrderId = OrderId(0); pub const RESERVED_TRADE_ID: TradeId = TradeId(0); pub const SPOT_MARKET_ID_OFFSET: u16 = 10_000;
11
12define_simple_type!(OrderId(u64));
13impl OrderId {
14 pub fn reserved() -> Self {
15 RESERVED_ORDER_ID
16 }
17
18 pub fn first_non_reserved() -> Self {
19 Self(RESERVED_ORDER_ID.0 + 1)
20 }
21
22 pub fn is_reserved(&self) -> bool {
23 self.0 == RESERVED_ORDER_ID.0
24 }
25}
26
27define_simple_type!(TradeId(u64));
28impl TradeId {
29 pub fn reserved() -> Self {
30 RESERVED_TRADE_ID
31 }
32
33 pub fn first_non_reserved() -> Self {
34 Self(RESERVED_TRADE_ID.0 + 1)
35 }
36
37 pub fn is_reserved(&self) -> bool {
38 self.0 == RESERVED_TRADE_ID.0
39 }
40}
41
42define_simple_type!(TriggerOrderId(u64));
43define_simple_type!(TwapId(u64));
44define_simple_type!(ClientOrderId(u64));
45define_simple_type!(AssetId(u16));
46define_simple_type!(MarketId(u16));
47impl MarketId {
48 pub fn kind(&self) -> MarketKind {
49 match self.0 {
50 id if id < SPOT_MARKET_ID_OFFSET => MarketKind::Perp,
51 _ => MarketKind::Spot,
52 }
53 }
54}
55
56define_simple_enum!(MarketKind{ Perp = 0, Spot = 1 });
57
58define_simple_enum!(Side{ Bid = 0, Ask = 1});
59impl Side {
60 pub fn reverse(&self) -> Self {
61 match self {
62 Side::Bid => Side::Ask,
63 Side::Ask => Side::Bid,
64 }
65 }
66}
67
68define_simple_enum! {
69 #[derive(strum::EnumIter)]
70 FeeTier {
71 Tier0,
72 Tier1,
73 Tier2,
74 Tier3,
75 Tier4,
76 Tier5,
77 Tier6,
78 Tier7,
79 Tier8,
80 Tier9
81 }
82}
83#[allow(clippy::derivable_impls)]
84impl Default for FeeTier {
85 fn default() -> Self {
86 Self::Tier0
87 }
88}
89define_simple_enum!(TriggerPriceCondition{Mark = 0, Oracle = 1, LastTrade = 2});
90define_simple_enum!(
91 #[derive(strum::EnumIter)]
92 TriggerDirection{ GreaterThanOrEqual = 0, LessThanOrEqual = 1}
93);
94define_simple_enum!(OrderType {
95 Limit = 0,
96 PostOnly = 1,
97 FillOrKill = 2,
98 ImmediateOrCancel = 3,
99 PostOnlySlide = 4, PostOnlyFront = 5 });
102define_simple_enum!(SpotCollateralTransferDirection {
103 MarginToSpot = 0,
104 SpotToMargin = 1
105});
106define_simple_enum!(AdminType {
107 Protocol,
108 Funding,
109 Pricing,
110 FeeTier,
111 Credits,
112 Referrals
113});
114
115define_simple_type!(
116 #[cfg_attr(feature = "schema", derive(sov_universal_wallet::UniversalWallet))]
117 TokenId(CustomString)
118 + Debug
119);
120impl std::str::FromStr for TokenId {
121 type Err = ();
122 fn from_str(v: &str) -> Result<Self, Self::Err> {
123 Ok(Self(CustomString::from(v)))
124 }
125}
126
127define_simple_enum!(TradingMode{ Iso = 0, Cross = 1 });
128
129define_simple_enum!(BorrowType {
130 Internal = 0,
132 UnrealizedLoss = 1,
134 External = 2,
136});
137
138define_simple_enum!(RepayType {
139 PnlProcessing,
141 Rebalance,
143 BalanceUpdate,
145});
146
147define_simple_enum!(MarketTradingStatus {
148 Active = 0,
150 Halted = 1,
153 Cleaning = 2,
156 Cleaned = 3,
158});
159
160define_enum!(
161 enum TakeFromInsuranceFundReason {
162 LiquidateBorrowLendLiability,
163 LiquidateIsoPerpPosition(MarketId),
164 }
165);