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_enum! {
46 enum OrderIdKind {
47 Server(OrderId) = 0,
48 Client(ClientOrderId) = 1,
49 }
50}
51define_simple_type!(AssetId(u16));
52define_simple_type!(MarketId(u16));
53impl MarketId {
54 pub fn kind(&self) -> MarketKind {
55 match self.0 {
56 id if id < SPOT_MARKET_ID_OFFSET => MarketKind::Perp,
57 _ => MarketKind::Spot,
58 }
59 }
60}
61
62define_simple_enum!(MarketKind{ Perp = 0, Spot = 1 });
63
64define_simple_enum!(Side{ Bid = 0, Ask = 1});
65impl Side {
66 pub fn reverse(&self) -> Self {
67 match self {
68 Side::Bid => Side::Ask,
69 Side::Ask => Side::Bid,
70 }
71 }
72}
73
74define_simple_enum! {
75 #[derive(strum::EnumIter)]
76 FeeTier {
77 Tier0,
78 Tier1,
79 Tier2,
80 Tier3,
81 Tier4,
82 Tier5,
83 Tier6,
84 Tier7,
85 Tier8,
86 Tier9
87 }
88}
89#[allow(clippy::derivable_impls)]
90impl Default for FeeTier {
91 fn default() -> Self {
92 Self::Tier0
93 }
94}
95define_simple_enum!(TriggerPriceCondition{Mark = 0, Oracle = 1, LastTrade = 2});
96define_simple_enum!(
97 #[derive(strum::EnumIter)]
98 TriggerDirection{ GreaterThanOrEqual = 0, LessThanOrEqual = 1}
99);
100define_simple_enum!(OrderType {
101 Limit = 0,
102 PostOnly = 1,
103 FillOrKill = 2,
104 ImmediateOrCancel = 3,
105 PostOnlySlide = 4, PostOnlyFront = 5 });
108define_simple_enum!(SpotCollateralTransferDirection {
109 MarginToSpot = 0,
110 SpotToMargin = 1
111});
112define_simple_enum!(AdminType { Protocol, Funding, Pricing, FeeTier, Credits, Referrals });
113
114define_simple_type!(
115 #[cfg_attr(feature = "schema", derive(sov_universal_wallet::UniversalWallet))]
116 TokenId(CustomString)
117 + Debug
118);
119impl std::str::FromStr for TokenId {
120 type Err = ();
121 fn from_str(v: &str) -> Result<Self, Self::Err> {
122 Ok(Self(CustomString::from(v)))
123 }
124}
125
126define_simple_enum!(TradingMode{ Iso = 0, Cross = 1 });
127
128define_simple_enum!(BorrowType {
129 Internal = 0,
131 UnrealizedLoss = 1,
133 External = 2,
135});
136
137define_simple_enum!(RepayType {
138 PnlProcessing,
140 Rebalance,
142 BalanceUpdate,
144});
145
146define_simple_enum!(MarketTradingStatus {
147 Active = 0,
149 Halted = 1,
152 Cleaning = 2,
155 Cleaned = 3,
157});
158
159define_enum!(
160 enum TakeFromInsuranceFundReason {
161 LiquidateBorrowLendLiability,
162 LiquidateIsoPerpPosition(MarketId),
163 }
164);