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
47impl<'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}