Skip to main content

binance_common/futures/model/params/
websocket.rs

1use 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}