use crate::client::OkxClient;
use crate::error::Error;
use crate::transport::Transport;
use super::endpoints::*;
use super::internal::*;
use super::requests::*;
use super::responses::*;
pub struct Funding<'a, T> {
client: &'a OkxClient<T>,
}
impl<'a, T: Transport> Funding<'a, T> {
pub(crate) fn new(client: &'a OkxClient<T>) -> Self {
Self { client }
}
pub async fn get_currencies(&self, ccy: Option<&str>) -> Result<Vec<Currency>, Error> {
let query = CcyQuery { ccy };
self.client.get(CURRENCIES, &query, true).await
}
pub async fn get_balances(&self, ccy: Option<&str>) -> Result<Vec<FundingBalance>, Error> {
let query = CcyQuery { ccy };
self.client.get(BALANCES, &query, true).await
}
pub async fn get_non_tradable_assets(
&self,
ccy: Option<&str>,
) -> Result<Vec<NonTradableAsset>, Error> {
let query = CcyQuery { ccy };
self.client.get(NON_TRADABLE_ASSETS, &query, true).await
}
pub async fn get_deposit_address(&self, ccy: &str) -> Result<Vec<DepositAddress>, Error> {
let query = RequiredCcyQuery { ccy };
self.client.get(DEPOSIT_ADDRESS, &query, true).await
}
pub async fn funds_transfer(
&self,
request: &FundsTransferRequest,
) -> Result<Vec<TransferResult>, Error> {
self.client.post(TRANSFER, request, true).await
}
pub async fn transfer_state(
&self,
trans_id: &str,
transfer_type: Option<&str>,
) -> Result<Vec<TransferState>, Error> {
let query = TransferStateQuery {
trans_id,
transfer_type,
};
self.client.get(TRANSFER_STATE, &query, true).await
}
pub async fn withdrawal(
&self,
request: &WithdrawalRequest,
) -> Result<Vec<WithdrawalResult>, Error> {
self.client.post(WITHDRAWAL, request, true).await
}
pub async fn get_deposit_history(
&self,
request: &DepositHistoryRequest,
) -> Result<Vec<DepositRecord>, Error> {
self.client.get(DEPOSIT_HISTORY, request, true).await
}
pub async fn get_bills(
&self,
request: &FundingBillsRequest,
) -> Result<Vec<FundingBill>, Error> {
self.client.get(BILLS, request, true).await
}
pub async fn get_deposit_lightning(
&self,
request: &DepositLightningRequest,
) -> Result<Vec<DepositLightning>, Error> {
self.client.get(DEPOSIT_LIGHTNING, request, true).await
}
pub async fn withdrawal_lightning(
&self,
request: &WithdrawalLightningRequest,
) -> Result<Vec<WithdrawalLightning>, Error> {
self.client.post(WITHDRAWAL_LIGHTNING, request, true).await
}
pub async fn cancel_withdrawal(&self, wd_id: &str) -> Result<Vec<WithdrawalResult>, Error> {
let body = WithdrawalIdBody { wd_id };
self.client.post(CANCEL_WITHDRAWAL, &body, true).await
}
pub async fn get_asset_valuation(
&self,
ccy: Option<&str>,
) -> Result<Vec<AssetValuation>, Error> {
let query = CcyQuery { ccy };
self.client.get(ASSET_VALUATION, &query, true).await
}
pub async fn get_deposit_withdraw_status(
&self,
request: &DepositWithdrawStatusRequest,
) -> Result<Vec<DepositWithdrawStatus>, Error> {
self.client
.get(DEPOSIT_WITHDRAW_STATUS, request, true)
.await
}
pub async fn get_withdrawal_history(
&self,
request: &WithdrawalHistoryRequest,
) -> Result<Vec<WithdrawalRecord>, Error> {
self.client.get(WITHDRAWAL_HISTORY, request, true).await
}
}