binance_common/
enums.rs

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}