use crate::domain::market::Market;
use crate::error::exchange_error::ExchangeError;
use crate::exchange::binance::account::RawAccountState;
use crate::exchange::binance::auth::BinanceAuth;
use crate::exchange::binance::client::{BinanceHttpTransport, BinanceTransport};
use crate::exchange::binance::orders::{RawCloseOrderAck, RawCloseOrderRequest, RawSymbolRules};
pub const BINANCE_DEMO_SPOT_BASE_URL: &str = "https://demo-api.binance.com";
pub const BINANCE_DEMO_FUTURES_BASE_URL: &str = "https://demo-fapi.binance.com";
pub const BINANCE_DEMO_OPTIONS_BASE_URL: &str = "https://testnet.binancefuture.com";
#[derive(Debug, Clone)]
pub struct BinanceDemoHttpTransport {
inner: BinanceHttpTransport,
}
impl BinanceDemoHttpTransport {
pub fn new(auth: BinanceAuth) -> Self {
Self {
inner: BinanceHttpTransport::with_base_urls(
auth,
BINANCE_DEMO_SPOT_BASE_URL,
BINANCE_DEMO_FUTURES_BASE_URL,
BINANCE_DEMO_OPTIONS_BASE_URL,
),
}
}
}
impl BinanceTransport for BinanceDemoHttpTransport {
fn transport_name(&self) -> &'static str {
"demo"
}
fn load_account_state(&self, market: Market) -> Result<RawAccountState, ExchangeError> {
self.inner.load_account_state(market)
}
fn load_last_price(&self, symbol: &str, market: Market) -> Result<f64, ExchangeError> {
self.inner.load_last_price(symbol, market)
}
fn load_symbol_rules(
&self,
symbol: &str,
market: Market,
) -> Result<RawSymbolRules, ExchangeError> {
self.inner.load_symbol_rules(symbol, market)
}
fn load_option_symbols(&self) -> Result<Vec<String>, ExchangeError> {
self.inner.load_option_symbols()
}
fn submit_close_order(
&self,
request: RawCloseOrderRequest,
) -> Result<RawCloseOrderAck, ExchangeError> {
self.inner.submit_close_order(request)
}
fn load_today_realized_pnl_usdt(&self) -> Result<f64, ExchangeError> {
self.inner.load_today_realized_pnl_usdt()
}
fn load_today_funding_pnl_usdt(&self) -> Result<f64, ExchangeError> {
self.inner.load_today_funding_pnl_usdt()
}
fn load_margin_ratio(&self) -> Result<Option<f64>, ExchangeError> {
self.inner.load_margin_ratio()
}
}