use async_trait::async_trait;
use crate::core::types::{
AccountType, ExchangeResult, Order,
AmendRequest, CancelScope, CancelAllResponse, OrderRequest, OrderResult,
TransferRequest, TransferHistoryFilter, TransferResponse,
DepositAddress, WithdrawRequest, WithdrawResponse, FundsRecord,
FundsHistoryFilter, SubAccountOperation, SubAccountResult,
FundingPayment, FundingFilter,
LedgerEntry, LedgerFilter,
};
use super::{Trading, Account};
#[async_trait]
pub trait CancelAll: Trading {
async fn cancel_all_orders(
&self,
scope: CancelScope,
account_type: AccountType,
) -> ExchangeResult<CancelAllResponse> {
let _ = (scope, account_type);
Err(crate::core::types::ExchangeError::UnsupportedOperation(
"cancel_all_orders not supported".into(),
))
}
}
#[async_trait]
pub trait AmendOrder: Trading {
async fn amend_order(&self, req: AmendRequest) -> ExchangeResult<Order> {
let _ = req;
Err(crate::core::types::ExchangeError::UnsupportedOperation(
"amend_order not supported".into(),
))
}
}
#[async_trait]
pub trait BatchOrders: Trading {
async fn place_orders_batch(
&self,
orders: Vec<OrderRequest>,
) -> ExchangeResult<Vec<OrderResult>> {
let _ = orders;
Err(crate::core::types::ExchangeError::UnsupportedOperation(
"place_orders_batch not supported".into(),
))
}
async fn cancel_orders_batch(
&self,
order_ids: Vec<String>,
symbol: Option<&str>,
account_type: AccountType,
) -> ExchangeResult<Vec<OrderResult>> {
let _ = (order_ids, symbol, account_type);
Err(crate::core::types::ExchangeError::UnsupportedOperation(
"cancel_orders_batch not supported".into(),
))
}
fn max_batch_place_size(&self) -> usize {
0
}
fn max_batch_cancel_size(&self) -> usize {
0
}
}
#[async_trait]
pub trait AccountTransfers: Account {
async fn transfer(&self, req: TransferRequest) -> ExchangeResult<TransferResponse> {
let _ = req;
Err(crate::core::types::ExchangeError::UnsupportedOperation(
"transfer not supported".into(),
))
}
async fn get_transfer_history(
&self,
filter: TransferHistoryFilter,
) -> ExchangeResult<Vec<TransferResponse>> {
let _ = filter;
Err(crate::core::types::ExchangeError::UnsupportedOperation(
"get_transfer_history not supported".into(),
))
}
}
#[async_trait]
pub trait CustodialFunds: Account {
async fn get_deposit_address(
&self,
asset: &str,
network: Option<&str>,
) -> ExchangeResult<DepositAddress> {
let _ = (asset, network);
Err(crate::core::types::ExchangeError::UnsupportedOperation(
"get_deposit_address not supported".into(),
))
}
async fn withdraw(&self, req: WithdrawRequest) -> ExchangeResult<WithdrawResponse> {
let _ = req;
Err(crate::core::types::ExchangeError::UnsupportedOperation(
"withdraw not supported".into(),
))
}
async fn get_funds_history(
&self,
filter: FundsHistoryFilter,
) -> ExchangeResult<Vec<FundsRecord>> {
let _ = filter;
Err(crate::core::types::ExchangeError::UnsupportedOperation(
"get_funds_history not supported".into(),
))
}
}
#[async_trait]
pub trait SubAccounts: Account {
async fn sub_account_operation(
&self,
op: SubAccountOperation,
) -> ExchangeResult<SubAccountResult> {
let _ = op;
Err(crate::core::types::ExchangeError::UnsupportedOperation(
"sub_account_operation not supported".into(),
))
}
}
#[async_trait]
pub trait FundingHistory: Send + Sync {
async fn get_funding_payments(
&self,
filter: FundingFilter,
account_type: AccountType,
) -> ExchangeResult<Vec<FundingPayment>> {
let _ = (filter, account_type);
Err(crate::core::types::ExchangeError::UnsupportedOperation(
"get_funding_payments not implemented".into(),
))
}
}
#[async_trait]
pub trait AccountLedger: Send + Sync {
async fn get_ledger(
&self,
filter: LedgerFilter,
account_type: AccountType,
) -> ExchangeResult<Vec<LedgerEntry>> {
let _ = (filter, account_type);
Err(crate::core::types::ExchangeError::UnsupportedOperation(
"get_ledger not implemented".into(),
))
}
}