use async_trait::async_trait;
use crate::core::types::{
AccountType, ExchangeResult, Order, OrderHistoryFilter, OrderRequest, CancelRequest,
PlaceOrderResponse, TradingCapabilities, UserTrade, UserTradeFilter,
};
use super::ExchangeIdentity;
#[async_trait]
pub trait Trading: ExchangeIdentity {
async fn place_order(&self, req: OrderRequest) -> ExchangeResult<PlaceOrderResponse>;
async fn cancel_order(&self, req: CancelRequest) -> ExchangeResult<Order>;
async fn get_order(
&self,
symbol: &str,
order_id: &str,
account_type: AccountType,
) -> ExchangeResult<Order>;
async fn get_open_orders(
&self,
symbol: Option<&str>,
account_type: AccountType,
) -> ExchangeResult<Vec<Order>>;
async fn get_order_history(
&self,
filter: OrderHistoryFilter,
account_type: AccountType,
) -> ExchangeResult<Vec<Order>>;
async fn get_user_trades(
&self,
filter: UserTradeFilter,
account_type: AccountType,
) -> ExchangeResult<Vec<UserTrade>> {
let _ = (filter, account_type);
Err(crate::core::types::ExchangeError::UnsupportedOperation(
"get_user_trades not implemented".into(),
))
}
fn trading_capabilities(&self, account_type: AccountType) -> TradingCapabilities {
let _ = account_type;
TradingCapabilities::permissive()
}
}