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 LiteUsdc,
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::LiteUsdc => "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.push_str(format!("{}@aggTrade", symbol).as_str());
97 self
98 }
99
100 pub fn mark_price(mut self, symbol: WebSocketSymbol, rate: WebSocketStreamRate) -> Self {
101 self.route
102 .push_str(format!("{}@markPrice@{}", symbol, rate).as_str());
103 self
104 }
105
106 pub fn mark_price_all(mut self, rate: WebSocketStreamRate) -> Self {
107 self.route
108 .push_str(format!("!@markPrice@{}", rate).as_str());
109 self
110 }
111
112 pub fn kline_candlesticks(mut self, symbol: WebSocketSymbol, interval: Interval) -> Self {
113 self.route
114 .push_str(format!("{}@kline_{}", symbol, interval.as_ref()).as_str());
115 self
116 }
117
118 pub fn symbol_ticker_mini(mut self, symbol: WebSocketSymbol) -> Self {
119 self.route
120 .push_str(format!("{}@miniTicker", symbol).as_str());
121 self
122 }
123
124 pub fn symbol_ticker_all(mut self) -> Self {
125 self.route.push_str("!ticker@arr");
126 self
127 }
128
129 pub fn symbol_ticker(mut self, symbol: WebSocketSymbol) -> Self {
130 self.route.push_str(format!("{}@ticker", symbol).as_str());
131 self
132 }
133
134 pub fn symbol_ticker_all_mini(mut self) -> Self {
135 self.route.push_str("!miniTicker@arr");
136 self
137 }
138
139 pub fn all_book_tickers(mut self) -> Self {
140 self.route.push_str("!bookTicker");
141 self
142 }
143
144 pub fn liquidation_order(mut self, symbol: WebSocketSymbol) -> Self {
145 self.route
146 .push_str(format!("{}@forceOrder", symbol).as_str());
147 self
148 }
149
150 pub fn all_market_liquidation_order(mut self) -> Self {
151 self.route.push_str(format!("!forceOrder@arr").as_str());
152 self
153 }
154
155 pub fn partial_book_depth(
156 mut self,
157 symbol: WebSocketSymbol,
158 levels: u8,
159 milliseconds: WebSocketStreamRate,
160 ) -> Self {
161 self.route
162 .push_str(format!("{}@depth{}@{}", symbol, levels, milliseconds).as_str());
163 self
164 }
165}