Skip to main content

binance_common/enums/
futures.rs

1use serde::{Deserialize, Deserializer, Serialize};
2
3#[derive(Clone, Debug, Deserialize, Serialize)]
4#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
5#[derive(Default)]
6pub enum ContractType {
7    #[default]
8    Perpetual,
9    CurrentMonth,
10    NextMonth,
11    CurrentQuarter,
12    NextQuarter,
13    PerpetualDelivering,
14}
15
16#[derive(Clone, Debug, Deserialize, Serialize)]
17#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
18pub enum ContractStatus {
19    PendingTrading,
20    Trading,
21    PreDelivering,
22    Delivering,
23    Delivered,
24    PreSettle,
25    Settling,
26    Close,
27}
28
29#[derive(Clone, Debug, Deserialize, Serialize)]
30#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
31pub enum OrderStatus {
32    New,
33    PartiallyFilled,
34    Filled,
35    Canceled,
36    Rejected,
37    Expired,
38    ExpiredInMatch,
39}
40
41#[derive(Clone, Debug, Deserialize, Serialize)]
42#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
43#[derive(Default)]
44pub enum OrderType {
45    Limit,
46    #[default]
47    Market,
48    Stop,
49    StopMarket,
50    TakeProfit,
51    TakeProfitMarket,
52    TrailingStopMarket,
53}
54
55#[derive(Clone, Debug, Deserialize, Serialize)]
56#[serde(rename_all = "UPPERCASE")]
57pub enum OrderResponseType {
58    Ack,
59    Result,
60}
61
62#[derive(Clone, Debug, Deserialize, Serialize)]
63#[serde(rename_all = "UPPERCASE")]
64#[derive(Default)]
65pub enum OrderSide {
66    #[default]
67    Buy,
68    Sell,
69}
70
71#[derive(Clone, Debug, Deserialize, Serialize)]
72#[serde(rename_all = "UPPERCASE")]
73#[derive(Default)]
74pub enum PositionSide {
75    Both,
76    #[default]
77    Long,
78    Short,
79}
80
81#[derive(Clone, Debug, Deserialize, Serialize)]
82#[serde(rename_all = "UPPERCASE")]
83pub enum TimeInForce {
84    Gtc,
85    Ioc,
86    Fok,
87    Gtx,
88    Gtd,
89}
90
91#[derive(Clone, Debug, Deserialize, Serialize)]
92#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
93pub enum WorkingType {
94    MarkPrice,
95    ContractPrice,
96}
97
98#[derive(Clone, Debug, Deserialize, Serialize)]
99#[serde(rename_all = "UPPERCASE")]
100pub enum ResponseType {
101    Ack,
102    Result,
103}
104
105#[derive(Clone, Debug, Deserialize, Serialize)]
106#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
107pub enum StpModes {
108    ExpireTaker,
109    ExpireBoth,
110    ExpireMaker,
111}
112
113#[derive(Clone, Debug, Deserialize, Serialize)]
114#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
115pub enum PriceMatch {
116    None,
117    Opponent,
118    Opponent5,
119    Opponent10,
120    Opponent20,
121    Queue,
122    Queue5,
123    Queue10,
124    Queue20,
125}
126
127#[derive(Debug, Clone, Serialize)]
128pub enum AdlLevel {
129    LowestRisk,
130    LowRisk,
131    Medium,
132    HighRisk,
133    HighestRisk,
134}
135
136impl<'de> Deserialize<'de> for AdlLevel {
137    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
138    where
139        D: Deserializer<'de>,
140    {
141        let value: u8 = Deserialize::deserialize(deserializer)?;
142        Ok(match value {
143            0 => AdlLevel::LowestRisk,
144            1 => AdlLevel::LowRisk,
145            2 => AdlLevel::Medium,
146            3 => AdlLevel::HighRisk,
147            4 => AdlLevel::HighestRisk,
148            _ => return Err(serde::de::Error::custom("Invalid ADL level")),
149        })
150    }
151}