use async_trait::async_trait;
use crate::core::types::{
AccountType, ExchangeResult, Order,
OrderHistoryFilter, OrderRequest, CancelRequest, PlaceOrderResponse,
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(),
))
}
}