1use crate::provider::prelude::*;
7use smartstring::alias::String;
8
9pub const BINANCE_USD_FUTURES_API_URL: &str = "https://fapi.binance.com";
11
12pub const BINANCE_COIN_FUTURES_API_URL: &str = "https://dapi.binance.com";
14
15pub const BINANCE_USD_FUTURES_WS_URL: &str = "wss://fstream.binance.com/ws";
17
18pub const BINANCE_COIN_FUTURES_WS_URL: &str = "wss://dstream.binance.com/ws";
20
21pub const BINANCE_USD_FUTURES_WS_COMBINED_URL: &str = "wss://fstream.binance.com/stream";
23
24pub const BINANCE_COIN_FUTURES_WS_COMBINED_URL: &str = "wss://dstream.binance.com/stream";
26
27pub const BINANCE_FUTURES_RATE_LIMITS: &[RateLimit] = &[
29 RateLimit {
30 limit_type: "REQUEST_WEIGHT",
31 interval: "MINUTE",
32 interval_num: 1,
33 limit: 2400,
34 },
35 RateLimit {
36 limit_type: "ORDERS",
37 interval: "MINUTE",
38 interval_num: 1,
39 limit: 1200,
40 },
41];
42
43#[derive(Debug, Clone, Copy, PartialEq, Eq)]
45pub enum BinanceFuturesContractType {
46 Perpetual,
48
49 CurrentQuarter,
51
52 NextQuarter,
54}
55
56impl std::fmt::Display for BinanceFuturesContractType {
57 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
58 match self {
59 BinanceFuturesContractType::Perpetual => write!(f, "PERPETUAL"),
60 BinanceFuturesContractType::CurrentQuarter => write!(f, "CURRENT_QUARTER"),
61 BinanceFuturesContractType::NextQuarter => write!(f, "NEXT_QUARTER"),
62 }
63 }
64}
65
66#[derive(Debug, Clone, Copy, PartialEq, Eq)]
68pub enum BinanceFuturesOrderType {
69 Limit,
71
72 Market,
74
75 Stop,
77
78 StopMarket,
80
81 TakeProfit,
83
84 TakeProfitMarket,
86
87 TrailingStopMarket,
89}
90
91impl std::fmt::Display for BinanceFuturesOrderType {
92 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
93 match self {
94 BinanceFuturesOrderType::Limit => write!(f, "LIMIT"),
95 BinanceFuturesOrderType::Market => write!(f, "MARKET"),
96 BinanceFuturesOrderType::Stop => write!(f, "STOP"),
97 BinanceFuturesOrderType::StopMarket => write!(f, "STOP_MARKET"),
98 BinanceFuturesOrderType::TakeProfit => write!(f, "TAKE_PROFIT"),
99 BinanceFuturesOrderType::TakeProfitMarket => write!(f, "TAKE_PROFIT_MARKET"),
100 BinanceFuturesOrderType::TrailingStopMarket => write!(f, "TRAILING_STOP_MARKET"),
101 }
102 }
103}
104
105#[derive(Debug, Clone, Copy, PartialEq, Eq)]
107pub enum BinanceFuturesOrderSide {
108 Buy,
110
111 Sell,
113}
114
115impl std::fmt::Display for BinanceFuturesOrderSide {
116 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
117 match self {
118 BinanceFuturesOrderSide::Buy => write!(f, "BUY"),
119 BinanceFuturesOrderSide::Sell => write!(f, "SELL"),
120 }
121 }
122}
123
124#[derive(Debug, Clone, Copy, PartialEq, Eq)]
126pub enum BinanceFuturesPositionSide {
127 Both,
129
130 Long,
132
133 Short,
135}
136
137impl std::fmt::Display for BinanceFuturesPositionSide {
138 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
139 match self {
140 BinanceFuturesPositionSide::Both => write!(f, "BOTH"),
141 BinanceFuturesPositionSide::Long => write!(f, "LONG"),
142 BinanceFuturesPositionSide::Short => write!(f, "SHORT"),
143 }
144 }
145}
146
147#[derive(Debug, Clone, Copy, PartialEq, Eq)]
149pub enum BinanceFuturesTimeInForce {
150 GTC,
152
153 IOC,
155
156 FOK,
158
159 GTX,
161}
162
163impl std::fmt::Display for BinanceFuturesTimeInForce {
164 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
165 match self {
166 BinanceFuturesTimeInForce::GTC => write!(f, "GTC"),
167 BinanceFuturesTimeInForce::IOC => write!(f, "IOC"),
168 BinanceFuturesTimeInForce::FOK => write!(f, "FOK"),
169 BinanceFuturesTimeInForce::GTX => write!(f, "GTX"),
170 }
171 }
172}
173
174#[derive(Debug, Clone, Copy, PartialEq, Eq)]
176pub enum BinanceFuturesWorkingType {
177 MarkPrice,
179
180 ContractPrice,
182}
183
184impl std::fmt::Display for BinanceFuturesWorkingType {
185 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
186 match self {
187 BinanceFuturesWorkingType::MarkPrice => write!(f, "MARK_PRICE"),
188 BinanceFuturesWorkingType::ContractPrice => write!(f, "CONTRACT_PRICE"),
189 }
190 }
191}
192
193#[derive(Debug, Clone, Copy, PartialEq, Eq)]
195pub enum BinanceFuturesMarginType {
196 Isolated,
198
199 Crossed,
201}
202
203impl BinanceFuturesMarginType {
204 pub const fn as_str(&self) -> &'static str {
206 match self {
207 BinanceFuturesMarginType::Isolated => "ISOLATED",
208 BinanceFuturesMarginType::Crossed => "CROSSED",
209 }
210 }
211
212 pub fn to_smartstring(&self) -> String {
214 self.as_str().into()
215 }
216}
217
218#[derive(Debug, Clone, Copy, PartialEq, Eq)]
220pub enum BinanceFuturesOrderStatus {
221 New,
223
224 PartiallyFilled,
226
227 Filled,
229
230 Canceled,
232
233 Canceling,
235
236 Rejected,
238
239 Expired,
241
242 Insurance,
244
245 Adl,
247}
248
249impl BinanceFuturesOrderStatus {
250 pub const fn as_str(&self) -> &'static str {
252 match self {
253 BinanceFuturesOrderStatus::New => "NEW",
254 BinanceFuturesOrderStatus::PartiallyFilled => "PARTIALLY_FILLED",
255 BinanceFuturesOrderStatus::Filled => "FILLED",
256 BinanceFuturesOrderStatus::Canceled => "CANCELED",
257 BinanceFuturesOrderStatus::Canceling => "CANCELING",
258 BinanceFuturesOrderStatus::Rejected => "REJECTED",
259 BinanceFuturesOrderStatus::Expired => "EXPIRED",
260 BinanceFuturesOrderStatus::Insurance => "INSURANCE",
261 BinanceFuturesOrderStatus::Adl => "ADL",
262 }
263 }
264
265 pub fn to_smartstring(&self) -> String {
267 self.as_str().into()
268 }
269}
270
271#[derive(Debug, Clone, Copy, PartialEq, Eq)]
273pub enum BinanceFuturesKlineInterval {
274 Minute1,
276
277 Minute3,
279
280 Minute5,
282
283 Minute15,
285
286 Minute30,
288
289 Hour1,
291
292 Hour2,
294
295 Hour4,
297
298 Hour6,
300
301 Hour8,
303
304 Hour12,
306
307 Day1,
309
310 Day3,
312
313 Week1,
315
316 Month1,
318}
319
320impl BinanceFuturesKlineInterval {
321 pub const fn as_str(&self) -> &'static str {
323 match self {
324 BinanceFuturesKlineInterval::Minute1 => "1m",
325 BinanceFuturesKlineInterval::Minute3 => "3m",
326 BinanceFuturesKlineInterval::Minute5 => "5m",
327 BinanceFuturesKlineInterval::Minute15 => "15m",
328 BinanceFuturesKlineInterval::Minute30 => "30m",
329 BinanceFuturesKlineInterval::Hour1 => "1h",
330 BinanceFuturesKlineInterval::Hour2 => "2h",
331 BinanceFuturesKlineInterval::Hour4 => "4h",
332 BinanceFuturesKlineInterval::Hour6 => "6h",
333 BinanceFuturesKlineInterval::Hour8 => "8h",
334 BinanceFuturesKlineInterval::Hour12 => "12h",
335 BinanceFuturesKlineInterval::Day1 => "1d",
336 BinanceFuturesKlineInterval::Day3 => "3d",
337 BinanceFuturesKlineInterval::Week1 => "1w",
338 BinanceFuturesKlineInterval::Month1 => "1M",
339 }
340 }
341
342 pub fn to_smartstring(&self) -> String {
344 self.as_str().into()
345 }
346}