birdie/enums/
mod.rs

1//! Enums that apply for both Rest API and WebSocket API.
2//!
3//! See [docs](https://developers.binance.com/docs/binance-spot-api-docs/enums)
4pub mod futures;
5
6use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Serialize)]
9#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
10pub enum SecurityType {
11    None,
12    Trade,
13    Margin,
14    UserData,
15    UserStream,
16    MarketData,
17}
18
19#[derive(Clone, Debug, Deserialize, Serialize)]
20#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
21pub enum SymbolStatus {
22    PreTrading,
23    Trading,
24    PostTrading,
25    EndOfDay,
26    Halt,
27    AuctionMatch,
28    Break,
29}
30
31#[derive(Clone, Debug, Deserialize, Serialize)]
32#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
33pub enum Permission {
34    Spot,
35    Margin,
36    Leveraged,
37    TrdGrp002,
38    TrdGrp003,
39    TrdGrp004,
40    TrdGrp005,
41    TrdGrp006,
42    TrdGrp007,
43    TrdGrp008,
44    TrdGrp009,
45    TrdGrp010,
46    TrdGrp011,
47    TrdGrp012,
48    TrdGrp013,
49    TrdGrp014,
50    TrdGrp015,
51    TrdGrp016,
52    TrdGrp017,
53    TrdGrp018,
54    TrdGrp019,
55    TrdGrp020,
56    TrdGrp021,
57    TrdGrp022,
58    TrdGrp023,
59    TrdGrp024,
60    TrdGrp025,
61}
62
63#[derive(Clone, Debug, Deserialize, Serialize)]
64#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
65pub enum OrderStatus {
66    New,
67    PendingNew,
68    PartiallyFilled,
69    Filled,
70    Canceled,
71    PendingCancel,
72    Rejected,
73    Expired,
74    ExpiredInMatch,
75}
76
77#[derive(Clone, Debug, Deserialize, Serialize)]
78#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
79pub enum OrderListStatus {
80    Response,
81    ExecStarted,
82    AllDone,
83}
84
85#[derive(Clone, Debug, Deserialize, Serialize)]
86#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
87pub enum OrderListOrderStatus {
88    Executing,
89    AllDone,
90    Reject,
91}
92
93#[derive(Clone, Debug, Deserialize, Serialize)]
94#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
95pub enum ContingencyType {
96    Oco,
97    Oto,
98}
99
100#[derive(Clone, Debug, Deserialize, Serialize)]
101#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
102pub enum AllocationType {
103    Sor,
104}
105
106#[derive(Clone, Debug, Deserialize, Serialize)]
107#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
108pub enum OrderType {
109    Limit,
110    Market,
111    StopLoss,
112    StopLossLimit,
113    TakeProfit,
114    TakeProfitLimit,
115    LimitMaker,
116}
117
118#[derive(Clone, Debug, Deserialize, Serialize)]
119#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
120pub enum ResponseType {
121    Ack,
122    Result,
123    Full,
124}
125
126#[derive(Clone, Debug, Deserialize, Serialize)]
127#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
128pub enum SideEffectType {
129    NoSideEffect,
130    MarginBuy,
131    AutoRepay,
132    AutoBorrowRepay,
133}
134
135#[derive(Clone, Debug, Deserialize, Serialize)]
136#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
137pub enum OrderRateLimitExceededMode {
138    DoNothing,
139    CancelOnly,
140}
141
142#[derive(Clone, Debug, Deserialize, Serialize)]
143#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
144pub enum WorkingFloor {
145    Exchange,
146    Sor,
147}
148
149#[derive(Clone, Debug, Deserialize, Serialize)]
150#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
151pub enum OrderSide {
152    Buy,
153    Sell,
154}
155
156#[derive(Clone, Debug, Deserialize, Serialize)]
157#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
158pub enum TimeInForce {
159    Gtc, // Good till canceled
160    Ioc, // Immediate or cancel
161    Fok, // Fill or kill
162}
163
164#[derive(Clone, Debug, Deserialize, Serialize)]
165#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
166pub enum SelfTradePreventionMode {
167    ExpireTaker,
168    ExpireMaker,
169    ExpireBoth,
170    None,
171}
172
173#[derive(Clone, Debug, Deserialize, Serialize)]
174#[serde(rename_all = "camelCase")]
175pub struct RateLimit {
176    pub rate_limit_type: String,
177    pub interval: RateLimitIntervals,
178    pub interval_num: i64,
179    pub limit: i64,
180}
181
182#[derive(Clone, Debug, Deserialize, Serialize)]
183#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
184pub enum RateLimitIntervals {
185    Second,
186    Minute,
187    Day,
188}
189
190#[derive(Clone, Debug, Deserialize, Serialize)]
191#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
192pub enum StpModes {
193    None,
194    ExpireMaker,
195    ExpireTaker,
196    ExpireBoth,
197}
198
199#[derive(Debug, Deserialize, Serialize)]
200#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
201pub enum CancelRestriction {
202    OnlyNew,
203    OnlyPartiallyFilled,
204}
205
206#[derive(Debug, Deserialize, Serialize)]
207#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
208pub enum CancelReplaceMode {
209    StopOnFailure,
210    AllowFailure,
211}
212
213#[derive(Debug, Deserialize, Serialize)]
214#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
215pub enum TickerType {
216    Full,
217    Mini,
218}
219
220#[derive(Debug)]
221pub enum KlineInterval {
222    OneSecond,
223    OneMinute,
224    ThreeMinutes,
225    FiveMinutes,
226    FifteenMinutes,
227    ThirtyMinutes,
228    OneHour,
229    TwoHours,
230    FourHours,
231    SixHours,
232    EightHours,
233    TwelveHours,
234    OneDay,
235    ThreeDays,
236    OneWeek,
237    OneMonth,
238}
239
240impl Serialize for KlineInterval {
241    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
242    where
243        S: serde::ser::Serializer,
244    {
245        let interval = match self {
246            KlineInterval::OneSecond => "1s",
247            KlineInterval::OneMinute => "1m",
248            KlineInterval::ThreeMinutes => "3m",
249            KlineInterval::FiveMinutes => "5m",
250            KlineInterval::FifteenMinutes => "15m",
251            KlineInterval::ThirtyMinutes => "30m",
252            KlineInterval::OneHour => "1h",
253            KlineInterval::TwoHours => "2h",
254            KlineInterval::FourHours => "4h",
255            KlineInterval::SixHours => "6h",
256            KlineInterval::EightHours => "8h",
257            KlineInterval::TwelveHours => "12h",
258            KlineInterval::OneDay => "1d",
259            KlineInterval::ThreeDays => "3d",
260            KlineInterval::OneWeek => "1w",
261            KlineInterval::OneMonth => "1M",
262        };
263        serializer.serialize_str(interval)
264    }
265}