barter_data/exchange/binance/futures/
mod.rs

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