crypto_ws_client/clients/bitget/
bitget_spot.rs1use async_trait::async_trait;
2
3use crate::{
4 clients::common_traits::{
5 Candlestick, Level3OrderBook, OrderBook, OrderBookTopK, Ticker, Trade, BBO,
6 },
7 common::{command_translator::CommandTranslator, ws_client_internal::WSClientInternal},
8 WSClient,
9};
10
11use super::{
12 utils::{BitgetCommandTranslator, BitgetMessageHandler, UPLINK_LIMIT},
13 EXCHANGE_NAME,
14};
15
16const WEBSOCKET_URL: &str = "wss://ws.bitget.com/spot/v1/stream";
17
18pub struct BitgetSpotWSClient {
23 client: WSClientInternal<BitgetMessageHandler>,
24 translator: BitgetCommandTranslator<'S'>,
25}
26
27impl BitgetSpotWSClient {
28 pub async fn new(tx: std::sync::mpsc::Sender<String>, url: Option<&str>) -> Self {
29 let real_url = match url {
30 Some(endpoint) => endpoint,
31 None => WEBSOCKET_URL,
32 };
33 BitgetSpotWSClient {
34 client: WSClientInternal::connect(
35 EXCHANGE_NAME,
36 real_url,
37 BitgetMessageHandler {},
38 Some(UPLINK_LIMIT),
39 tx,
40 )
41 .await,
42 translator: BitgetCommandTranslator::<'S'> {},
43 }
44 }
45}
46
47impl_trait!(Trade, BitgetSpotWSClient, subscribe_trade, "trade");
48#[rustfmt::skip]
49impl_trait!(OrderBookTopK, BitgetSpotWSClient, subscribe_orderbook_topk, "books15");
50impl_trait!(OrderBook, BitgetSpotWSClient, subscribe_orderbook, "books");
51impl_trait!(Ticker, BitgetSpotWSClient, subscribe_ticker, "ticker");
52impl_candlestick!(BitgetSpotWSClient);
53
54panic_bbo!(BitgetSpotWSClient);
55panic_l3_orderbook!(BitgetSpotWSClient);
56
57impl_ws_client_trait!(BitgetSpotWSClient);