binance_common/futures/model/params/
websocket.rs1use std::fmt;
2
3use crate::{
4 enums::{Interval, WebSocketStreamRate},
5 futures::endpoint::host::WebSocketHost,
6};
7
8#[derive(Debug)]
9pub enum WebSocketSymbol {
10 AdaUsdc,
11 AdaUsdt,
12 AvaxUsdc,
13 AvaxUsdt,
14 BnbUsdc,
15 BnbUsdt,
16 BchUsdt,
17 BtcUsdc,
18 BtcUsdt,
19 CfxUsdt,
20 DogeUsdc,
21 DogeUsdt,
22 EgldUsdt,
23 EnaUsdt,
24 EthUsdc,
25 EthUsdt,
26 EthBusd,
27 FilUsdc,
28 IcpUsdt,
29 LinkUsdc,
30 LinkUsdt,
31 LtcUsdc,
32 LtcUsdt,
33 MaticUsdc,
34 MaticUsdt,
35 SolUsdc,
36 SolUsdt,
37 DotBusd,
38 DotUsdt,
39 XrpUsdc,
40 XrpUsdt,
41 PenguUsdt,
42}
43
44impl fmt::Display for WebSocketSymbol {
45 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
46 let symbol: &'static str = match self {
47 WebSocketSymbol::AdaUsdc => "adausdc",
48 WebSocketSymbol::AdaUsdt => "adausdt",
49 WebSocketSymbol::AvaxUsdc => "avaxusdc",
50 WebSocketSymbol::AvaxUsdt => "avaxusdt",
51 WebSocketSymbol::BnbUsdc => "bnbusdc",
52 WebSocketSymbol::BnbUsdt => "bnbusdt",
53 WebSocketSymbol::BchUsdt => "bchusdt",
54 WebSocketSymbol::BtcUsdc => "btcusdc",
55 WebSocketSymbol::BtcUsdt => "btcusdt",
56 WebSocketSymbol::CfxUsdt => "cfxusdt",
57 WebSocketSymbol::DogeUsdc => "dogeusdc",
58 WebSocketSymbol::DogeUsdt => "dogeusdt",
59 WebSocketSymbol::EnaUsdt => "enausdt",
60 WebSocketSymbol::EgldUsdt => "egldusdt",
61 WebSocketSymbol::EthUsdc => "ethusdc",
62 WebSocketSymbol::EthUsdt => "ethusdt",
63 WebSocketSymbol::EthBusd => "ethbusd",
64 WebSocketSymbol::FilUsdc => "filusdc",
65 WebSocketSymbol::IcpUsdt => "icpusdt",
66 WebSocketSymbol::LinkUsdc => "linkusdc",
67 WebSocketSymbol::LinkUsdt => "linkusdt",
68 WebSocketSymbol::LtcUsdc => "ltcusdc",
69 WebSocketSymbol::LtcUsdt => "ltcusdt",
70 WebSocketSymbol::MaticUsdc => "maticusdc",
71 WebSocketSymbol::MaticUsdt => "maticusdt",
72 WebSocketSymbol::SolUsdc => "solusdc",
73 WebSocketSymbol::SolUsdt => "solusdt",
74 WebSocketSymbol::DotBusd => "dotbusd",
75 WebSocketSymbol::DotUsdt => "dotusdt",
76 WebSocketSymbol::XrpUsdc => "xrpusdc",
77 WebSocketSymbol::XrpUsdt => "xrpusdt",
78 WebSocketSymbol::PenguUsdt => "penguusdt",
79 };
80 write!(f, "{}", symbol)
81 }
82}
83
84pub struct WebSocketParams {
85 pub route: String,
86}
87
88impl WebSocketParams {
89 pub fn new(host: WebSocketHost) -> Self {
90 WebSocketParams {
91 route: host.as_ref().to_string(),
92 }
93 }
94
95 pub fn agg_trade(mut self, symbol: WebSocketSymbol) -> Self {
96 self.route
97 .push_str(format!("{}@aggTrade/", symbol).as_str());
98 self
99 }
100
101 pub fn mark_price(mut self, symbol: WebSocketSymbol, rate: WebSocketStreamRate) -> Self {
102 self.route
103 .push_str(format!("{}@markPrice@{}/", symbol, rate).as_str());
104 self
105 }
106
107 pub fn mark_price_all(mut self, rate: WebSocketStreamRate) -> Self {
108 self.route
109 .push_str(format!("!@markPrice@{}/", rate).as_str());
110 self
111 }
112
113 pub fn kline_candlesticks(mut self, symbol: WebSocketSymbol, interval: Interval) -> Self {
114 self.route
115 .push_str(format!("{}@kline_{}/", symbol, interval.as_ref()).as_str());
116 self
117 }
118
119 pub fn symbol_ticker_mini(mut self, symbol: WebSocketSymbol) -> Self {
120 self.route
121 .push_str(format!("{}@miniTicker/", symbol).as_str());
122 self
123 }
124
125 pub fn symbol_ticker_all(mut self) -> Self {
126 self.route.push_str("!ticker@arr/");
127 self
128 }
129
130 pub fn symbol_ticker(mut self, symbol: WebSocketSymbol) -> Self {
131 self.route.push_str(format!("{}@ticker/", symbol).as_str());
132 self
133 }
134
135 pub fn symbol_ticker_all_mini(mut self) -> Self {
136 self.route.push_str("!miniTicker@arr/");
137 self
138 }
139
140 pub fn all_book_tickers(mut self) -> Self {
141 self.route.push_str("!bookTicker/");
142 self
143 }
144
145 pub fn liquidation_order(mut self, symbol: WebSocketSymbol) -> Self {
146 self.route
147 .push_str(format!("{}@forceOrder/", symbol).as_str());
148 self
149 }
150
151 pub fn all_market_liquidation_order(mut self) -> Self {
152 self.route.push_str("!forceOrder@arr/");
153 self
154 }
155
156 pub fn partial_book_depth(
157 mut self,
158 symbol: WebSocketSymbol,
159 levels: u8,
160 milliseconds: WebSocketStreamRate,
161 ) -> Self {
162 self.route
163 .push_str(format!("{}@depth{}@{}/", symbol, levels, milliseconds).as_str());
164 self
165 }
166}