Skip to main content

binance_common/
enums.rs

1pub mod futures;
2pub mod spot;
3
4use serde::{Deserialize, Serialize};
5pub enum Interval {
6    Seconds1,
7    Minutes1,
8    Minutes3,
9    Minutes5,
10    Minutes15,
11    Minutes30,
12    Hours1,
13    Hours2,
14    Hours4,
15    Hours6,
16    Hours8,
17    Hours12,
18    Days1,
19    Days3,
20    Weeks1,
21    Months1,
22}
23
24impl AsRef<str> for Interval {
25    fn as_ref(&self) -> &'static str {
26        match self {
27            Interval::Seconds1 => "1s",
28            Interval::Minutes1 => "1m",
29            Interval::Minutes3 => "3m",
30            Interval::Minutes5 => "5m",
31            Interval::Minutes15 => "15m",
32            Interval::Minutes30 => "30m",
33            Interval::Hours1 => "1h",
34            Interval::Hours2 => "2h",
35            Interval::Hours4 => "4h",
36            Interval::Hours6 => "6h",
37            Interval::Hours8 => "8h",
38            Interval::Hours12 => "12h",
39            Interval::Days1 => "1d",
40            Interval::Days3 => "3d",
41            Interval::Weeks1 => "1w",
42            Interval::Months1 => "1M",
43        }
44    }
45}
46
47//PARTIAL IMPLEMENTATION
48impl<'de> Deserialize<'de> for Interval {
49    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
50    where
51        D: serde::Deserializer<'de>,
52    {
53        let value: String = Deserialize::deserialize(deserializer)?;
54
55        Ok(match value.as_str() {
56            "1s" => Interval::Seconds1,
57            _ => return Err(serde::de::Error::custom("Invalid interval")),
58        })
59    }
60}
61
62#[derive(Clone, Debug, Deserialize, Serialize)]
63#[serde(rename_all = "UPPERCASE")]
64pub enum RateLimits {
65    Second,
66    Minute,
67    Day,
68}
69
70#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
71#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
72pub enum IncomeType {
73    Transfer,
74    WelcomeBonus,
75    RealizedPnl,
76    FundingFee,
77    Commission,
78    InsuranceClear,
79    ReferralKickback,
80    CommissionRebate,
81    ApiRebate,
82    ContestReward,
83    CrossCollateralTransfer,
84    OptionsPremiumFee,
85    OptionsSettleProfit,
86    InternalTransfer,
87    AutoExchange,
88    DeliveredSettelment,
89    CoinSwapDeposit,
90    CoinSwapWithdraw,
91    PositionLimitIncreaseFee,
92    StrategyUmfuturesTransfer,
93    FeeReturn,
94    BfusdReward,
95}
96
97#[derive(Clone, Debug, Deserialize, Serialize)]
98#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
99pub enum CancelRestrictions {
100    OnlyNew,
101    OnlyPartiallyFilled,
102}
103
104#[derive(Debug)]
105pub enum WebSocketCommand {
106    Connect(String),
107    Disconnect,
108    Close,
109    Reconnect,
110}
111
112#[derive(Debug)]
113pub enum WebSocketStatus {
114    Connected,
115    Disconnected,
116    Closed,
117    Idle,
118}
119
120pub enum WebSocketStreamRate {
121    Milliseconds100,
122    Milliseconds250,
123    Milliseconds500,
124    Seconds1,
125    Seconds3,
126}
127
128impl std::fmt::Display for WebSocketStreamRate {
129    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
130        let rate: &'static str = match self {
131            WebSocketStreamRate::Milliseconds100 => "100ms",
132            WebSocketStreamRate::Milliseconds250 => "250ms",
133            WebSocketStreamRate::Milliseconds500 => "500ms",
134            WebSocketStreamRate::Seconds1 => "1s",
135            WebSocketStreamRate::Seconds3 => "3s",
136        };
137
138        write!(f, "{}", rate)
139    }
140}
141
142#[derive(Debug)]
143pub enum WebSocketType {
144    SingleStream,
145    MultiStream,
146}