Skip to main content

barter_data/exchange/binance/futures/
mod.rs

1use self::liquidation::BinanceLiquidation;
2use super::{Binance, ExchangeServer};
3use crate::{
4    NoInitialSnapshots,
5    exchange::{
6        StreamSelector,
7        binance::{
8            BinanceWsStream,
9            futures::l2::{
10                BinanceFuturesUsdOrderBooksL2SnapshotFetcher,
11                BinanceFuturesUsdOrderBooksL2Transformer,
12            },
13        },
14    },
15    instrument::InstrumentData,
16    subscription::{book::OrderBooksL2, liquidation::Liquidations},
17    transformer::stateless::StatelessTransformer,
18};
19use barter_instrument::exchange::ExchangeId;
20use std::fmt::{Display, Formatter};
21
22/// Level 2 OrderBook types.
23pub mod l2;
24
25/// Liquidation types.
26pub mod liquidation;
27
28/// [`BinanceFuturesUsd`] WebSocket server base url.
29///
30/// See docs: <https://binance-docs.github.io/apidocs/futures/en/#websocket-market-streams>
31pub const WEBSOCKET_BASE_URL_BINANCE_FUTURES_USD: &str = "wss://fstream.binance.com/ws";
32
33/// [`Binance`] perpetual usd exchange.
34pub type BinanceFuturesUsd = Binance<BinanceServerFuturesUsd>;
35
36/// [`Binance`] perpetual usd [`ExchangeServer`].
37#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Default)]
38pub struct BinanceServerFuturesUsd;
39
40impl ExchangeServer for BinanceServerFuturesUsd {
41    const ID: ExchangeId = ExchangeId::BinanceFuturesUsd;
42
43    fn websocket_url() -> &'static str {
44        WEBSOCKET_BASE_URL_BINANCE_FUTURES_USD
45    }
46}
47
48impl<Instrument> StreamSelector<Instrument, OrderBooksL2> for BinanceFuturesUsd
49where
50    Instrument: InstrumentData,
51{
52    type SnapFetcher = BinanceFuturesUsdOrderBooksL2SnapshotFetcher;
53    type Stream = BinanceWsStream<BinanceFuturesUsdOrderBooksL2Transformer<Instrument::Key>>;
54}
55
56impl<Instrument> StreamSelector<Instrument, Liquidations> for BinanceFuturesUsd
57where
58    Instrument: InstrumentData,
59{
60    type SnapFetcher = NoInitialSnapshots;
61    type Stream = BinanceWsStream<
62        StatelessTransformer<Self, Instrument::Key, Liquidations, BinanceLiquidation>,
63    >;
64}
65
66impl Display for BinanceFuturesUsd {
67    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
68        write!(f, "BinanceFuturesUsd")
69    }
70}