use std::{any::Any, collections::HashMap};
use nautilus_model::identifiers::{AccountId, TraderId};
use nautilus_system::factories::ClientConfig;
use rust_decimal::Decimal;
use crate::common::enums::{BinanceEnvironment, BinanceMarginType, BinanceProductType};
#[derive(Clone, Debug, bon::Builder)]
#[cfg_attr(
feature = "python",
pyo3::pyclass(module = "nautilus_trader.core.nautilus_pyo3.binance", from_py_object)
)]
#[cfg_attr(
feature = "python",
pyo3_stub_gen::derive::gen_stub_pyclass(module = "nautilus_trader.binance")
)]
pub struct BinanceDataClientConfig {
#[builder(default = vec![BinanceProductType::Spot])]
pub product_types: Vec<BinanceProductType>,
#[builder(default = BinanceEnvironment::Mainnet)]
pub environment: BinanceEnvironment,
pub base_url_http: Option<String>,
pub base_url_ws: Option<String>,
pub api_key: Option<String>,
pub api_secret: Option<String>,
#[builder(default = 3600)]
pub instrument_status_poll_secs: u64,
}
impl Default for BinanceDataClientConfig {
fn default() -> Self {
Self::builder().build()
}
}
impl ClientConfig for BinanceDataClientConfig {
fn as_any(&self) -> &dyn Any {
self
}
}
#[derive(Clone, Debug, bon::Builder)]
#[cfg_attr(
feature = "python",
pyo3::pyclass(module = "nautilus_trader.core.nautilus_pyo3.binance", from_py_object)
)]
#[cfg_attr(
feature = "python",
pyo3_stub_gen::derive::gen_stub_pyclass(module = "nautilus_trader.binance")
)]
pub struct BinanceExecClientConfig {
#[builder(default = TraderId::from("TRADER-001"))]
pub trader_id: TraderId,
#[builder(default = AccountId::from("BINANCE-001"))]
pub account_id: AccountId,
#[builder(default = vec![BinanceProductType::Spot])]
pub product_types: Vec<BinanceProductType>,
#[builder(default = BinanceEnvironment::Mainnet)]
pub environment: BinanceEnvironment,
pub base_url_http: Option<String>,
pub base_url_ws: Option<String>,
pub base_url_ws_trading: Option<String>,
#[builder(default = true)]
pub use_ws_trading: bool,
#[builder(default = true)]
pub use_position_ids: bool,
#[builder(default = Decimal::new(4, 4))]
pub default_taker_fee: Decimal,
pub api_key: Option<String>,
pub api_secret: Option<String>,
pub futures_leverages: Option<HashMap<String, u32>>,
pub futures_margin_types: Option<HashMap<String, BinanceMarginType>>,
#[builder(default = false)]
pub treat_expired_as_canceled: bool,
}
impl Default for BinanceExecClientConfig {
fn default() -> Self {
Self::builder().build()
}
}
impl ClientConfig for BinanceExecClientConfig {
fn as_any(&self) -> &dyn Any {
self
}
}