1use serde::{Deserialize, Deserializer, Serialize};
2pub enum Interval {
3 Seconds1,
4 Minutes1,
5 Minutes3,
6 Minutes5,
7 Minutes15,
8 Minutes30,
9 Hours1,
10 Hours2,
11 Hours4,
12 Hours6,
13 Hours8,
14 Hours12,
15 Days1,
16 Days3,
17 Weeks1,
18 Months1,
19}
20
21impl AsRef<str> for Interval {
22 fn as_ref(&self) -> &'static str {
23 match self {
24 Interval::Seconds1 => "1s",
25 Interval::Minutes1 => "1m",
26 Interval::Minutes3 => "3m",
27 Interval::Minutes5 => "5m",
28 Interval::Minutes15 => "15m",
29 Interval::Minutes30 => "30m",
30 Interval::Hours1 => "1h",
31 Interval::Hours2 => "2h",
32 Interval::Hours4 => "4h",
33 Interval::Hours6 => "6h",
34 Interval::Hours8 => "8h",
35 Interval::Hours12 => "12h",
36 Interval::Days1 => "1d",
37 Interval::Days3 => "3d",
38 Interval::Weeks1 => "1w",
39 Interval::Months1 => "1M",
40 }
41 }
42}
43
44#[derive(Clone, Debug, Deserialize, Serialize)]
45#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
46pub enum ContingencyType {
47 Oco,
48 Oto,
49}
50
51#[derive(Clone, Debug, Deserialize, Serialize)]
52#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
53pub enum AllocationType {
54 Sor,
55}
56
57#[derive(Clone, Debug, Deserialize, Serialize)]
58#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
59pub enum OrderType {
60 Limit,
61 LimitMaker,
62 Market,
63 Stop,
64 StopLoss,
65 StopLossLimit,
66 StopMarket,
67 TakeProfit,
68 TakeProfitLimit,
69 TakeProfitMarket,
70 TrailingStopMarket,
71}
72
73impl Default for OrderType {
74 fn default() -> Self {
75 OrderType::Market
76 }
77}
78
79#[derive(Clone, Debug, Deserialize, Serialize)]
80#[serde(rename_all = "UPPERCASE")]
81pub enum OrderResponseType {
82 Ack,
83 Result,
84 Full,
85}
86
87#[derive(Clone, Debug, Deserialize, Serialize)]
88#[serde(rename_all = "UPPERCASE")]
89pub enum WorkingFloor {
90 Exchange,
91 Sor,
92}
93
94#[derive(Clone, Debug, Deserialize, Serialize)]
95#[serde(rename_all = "UPPERCASE")]
96pub enum OrderSide {
97 Buy,
98 Sell,
99}
100
101impl Default for OrderSide {
102 fn default() -> Self {
103 OrderSide::Buy
104 }
105}
106
107#[derive(Clone, Debug, Deserialize, Serialize)]
108#[serde(rename_all = "UPPERCASE")]
109pub enum TimeInForce {
110 Gtc,
111 Ioc,
112 Fok,
113}
114
115#[derive(Clone, Debug, Deserialize, Serialize)]
116#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
117pub enum StpModes {
118 None,
119 ExpireMaker,
120 ExpireTaker,
121 ExpireBoth,
122 Decrement,
123}
124
125#[derive(Clone, Debug, Deserialize, Serialize)]
126#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
127pub enum CancelRestrictions {
128 OnlyNew,
129 OnlyPartiallyFilled,
130}
131
132#[derive(Clone, Debug, Deserialize, Serialize)]
133#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
134pub enum ContractType {
135 CurrentQuarter,
136 NextQuarter,
137 Perpetual,
138}
139
140impl Default for ContractType {
141 fn default() -> Self {
142 ContractType::Perpetual
143 }
144}
145
146#[derive(Clone, Debug, Deserialize, Serialize)]
147#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
148pub enum PositionSide {
149 Both,
150 Long,
151 Short,
152}
153
154impl Default for PositionSide {
155 fn default() -> Self {
156 PositionSide::Both
157 }
158}
159
160#[derive(Clone, Debug, Deserialize, Serialize)]
161#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
162pub enum WorkingType {
163 ContractPrice,
164 MarkPrice,
165}
166
167impl Default for WorkingType {
168 fn default() -> Self {
169 WorkingType::ContractPrice
170 }
171}
172
173#[derive(Debug, Clone, Serialize, Deserialize)]
174#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
175pub enum PriceMatch {
176 Opponent,
177 Opponent5,
178 Opponent10,
179 Opponent20,
180 Queue,
181 Queue5,
182 Queue10,
183 Queue20,
184}
185
186#[derive(Debug, Clone, Serialize)]
187pub enum AdlLevel {
188 LowestRisk,
189 LowRisk,
190 Medium,
191 HighRisk,
192 HighestRisk,
193}
194
195impl<'de> Deserialize<'de> for AdlLevel {
196 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
197 where
198 D: Deserializer<'de>,
199 {
200 let val: u8 = Deserialize::deserialize(deserializer)?;
201 Ok(match val {
202 0 => AdlLevel::LowestRisk,
203 1 => AdlLevel::LowRisk,
204 2 => AdlLevel::Medium,
205 3 => AdlLevel::HighRisk,
206 4 => AdlLevel::HighestRisk,
207 _ => return Err(serde::de::Error::custom("Invalid ADL level")),
208 })
209 }
210}
211
212#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
213#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
214pub enum IncomeType {
215 Transfer,
216 WelcomeBonus,
217 RealizedPnl,
218 FundingFee,
219 Commission,
220 InsuranceClear,
221 ReferralKickback,
222 CommissionRebate,
223 ApiRebate,
224 ContestReward,
225 CrossCollateralTransfer,
226 OptionsPremiumFee,
227 OptionsSettleProfit,
228 InternalTransfer,
229 AutoExchange,
230 DeliveredSettelment,
231 CoinSwapDeposit,
232 CoinSwapWithdraw,
233 PositionLimitIncreaseFee,
234 StrategyUmfuturesTransfer,
235 FeeReturn,
236 BfusdReward,
237}
238
239#[derive(Debug)]
240pub enum WebSocketCommand {
241 Connect(String),
242 Disconnect,
243 Close,
244 Reconnect,
245}
246
247#[derive(Debug)]
248pub enum WebSocketStatus {
249 Connected,
250 Disconnected,
251 Closed,
252 Idle,
253}
254
255pub enum WebSocketStreamRate {
256 Milliseconds100,
257 Milliseconds250,
258 Milliseconds500,
259 Seconds1,
260 Seconds3,
261}
262
263impl std::fmt::Display for WebSocketStreamRate {
264 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
265 let rate: &'static str = match self {
266 WebSocketStreamRate::Milliseconds100 => "100ms",
267 WebSocketStreamRate::Milliseconds250 => "250ms",
268 WebSocketStreamRate::Milliseconds500 => "500ms",
269 WebSocketStreamRate::Seconds1 => "1s",
270 WebSocketStreamRate::Seconds3 => "3s",
271 };
272
273 write!(f, "{}", rate)
274 }
275}
276
277#[derive(Debug)]
278pub enum WebSocketType {
279 SingleStream,
280 MultiStream,
281}