Skip to main content

bat_markets/
native.rs

1use bat_markets_core::Result;
2#[cfg(any(
3    all(feature = "binance", feature = "bybit"),
4    all(feature = "binance", feature = "mexc"),
5    all(feature = "bybit", feature = "mexc")
6))]
7use bat_markets_core::{ErrorKind, MarketError};
8
9use crate::client::AdapterHandle;
10
11/// Access to venue-specific adapter functionality.
12pub struct NativeClient<'a> {
13    inner: &'a AdapterHandle,
14}
15
16impl<'a> NativeClient<'a> {
17    pub(crate) const fn new(inner: &'a AdapterHandle) -> Self {
18        Self { inner }
19    }
20
21    /// Return the Binance adapter when this client was built for Binance.
22    #[cfg(feature = "binance")]
23    pub fn binance(&self) -> Result<&bat_markets_binance::BinanceLinearFuturesAdapter> {
24        match self.inner {
25            AdapterHandle::Binance(adapter) => Ok(adapter),
26            #[cfg(feature = "bybit")]
27            AdapterHandle::Bybit(_) => Err(MarketError::new(
28                ErrorKind::Unsupported,
29                "native binance access requested for non-binance client",
30            )),
31            #[cfg(feature = "mexc")]
32            AdapterHandle::Mexc(_) => Err(MarketError::new(
33                ErrorKind::Unsupported,
34                "native binance access requested for non-binance client",
35            )),
36        }
37    }
38
39    /// Return the Bybit adapter when this client was built for Bybit.
40    #[cfg(feature = "bybit")]
41    pub fn bybit(&self) -> Result<&bat_markets_bybit::BybitLinearFuturesAdapter> {
42        match self.inner {
43            AdapterHandle::Bybit(adapter) => Ok(adapter),
44            #[cfg(feature = "binance")]
45            AdapterHandle::Binance(_) => Err(MarketError::new(
46                ErrorKind::Unsupported,
47                "native bybit access requested for non-bybit client",
48            )),
49            #[cfg(feature = "mexc")]
50            AdapterHandle::Mexc(_) => Err(MarketError::new(
51                ErrorKind::Unsupported,
52                "native bybit access requested for non-bybit client",
53            )),
54        }
55    }
56
57    /// Return the MEXC adapter when this client was built for MEXC.
58    #[cfg(feature = "mexc")]
59    pub fn mexc(&self) -> Result<&bat_markets_mexc::MexcLinearFuturesAdapter> {
60        match self.inner {
61            AdapterHandle::Mexc(adapter) => Ok(adapter),
62            #[cfg(feature = "binance")]
63            AdapterHandle::Binance(_) => Err(MarketError::new(
64                ErrorKind::Unsupported,
65                "native mexc access requested for non-mexc client",
66            )),
67            #[cfg(feature = "bybit")]
68            AdapterHandle::Bybit(_) => Err(MarketError::new(
69                ErrorKind::Unsupported,
70                "native mexc access requested for non-mexc client",
71            )),
72        }
73    }
74}