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