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
11pub 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 #[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 #[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 #[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}