use super::{Binance, futures::BinanceFuturesUsd};
use crate::{
Identifier,
subscription::{
Subscription,
book::{OrderBooksL1, OrderBooksL2},
liquidation::Liquidations,
trade::PublicTrades,
},
};
use serde::Serialize;
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Serialize)]
pub struct BinanceChannel(pub &'static str);
impl BinanceChannel {
pub const TRADES: Self = Self("@trade");
pub const ORDER_BOOK_L1: Self = Self("@bookTicker");
pub const ORDER_BOOK_L2: Self = Self("@depth@100ms");
pub const LIQUIDATIONS: Self = Self("@forceOrder");
}
impl<Server, Instrument> Identifier<BinanceChannel>
for Subscription<Binance<Server>, Instrument, PublicTrades>
{
fn id(&self) -> BinanceChannel {
BinanceChannel::TRADES
}
}
impl<Server, Instrument> Identifier<BinanceChannel>
for Subscription<Binance<Server>, Instrument, OrderBooksL1>
{
fn id(&self) -> BinanceChannel {
BinanceChannel::ORDER_BOOK_L1
}
}
impl<Server, Instrument> Identifier<BinanceChannel>
for Subscription<Binance<Server>, Instrument, OrderBooksL2>
{
fn id(&self) -> BinanceChannel {
BinanceChannel::ORDER_BOOK_L2
}
}
impl<Instrument> Identifier<BinanceChannel>
for Subscription<BinanceFuturesUsd, Instrument, Liquidations>
{
fn id(&self) -> BinanceChannel {
BinanceChannel::LIQUIDATIONS
}
}
impl AsRef<str> for BinanceChannel {
fn as_ref(&self) -> &str {
self.0
}
}