pub mod delegated;
pub mod types;
#[allow(unused_imports)]
use types::*;
#[derive(Clone)]
pub struct ExchangesClient {
client: crate::client::Client,
}
impl ExchangesClient {
pub fn new(client: crate::client::Client) -> Self {
ExchangesClient { client }
}
pub async fn get_exchange(
&self,
exchange_id: String,
) -> Result<GetExchangeResponse, crate::error::Error> {
let path = format!("/exchanges/{}", urlencoding::encode(&exchange_id));
self.client
.request::<GetExchangeResponse>(reqwest::Method::GET, &path, None, false)
.await
}
pub async fn delete_exchange(
&self,
exchange_id: String,
) -> Result<DeleteExchangeResponse, crate::error::Error> {
let path = format!("/exchanges/{}", urlencoding::encode(&exchange_id));
self.client
.request::<DeleteExchangeResponse>(reqwest::Method::DELETE, &path, None, true)
.await
}
pub async fn list_exchanges(
&self,
query: Option<ListExchangesQuery>,
) -> Result<ListExchangesResponse, crate::error::Error> {
let mut path = String::from("/exchanges");
if let Some(query) = &query {
let mut q: Vec<String> = Vec::new();
if let Some(v) = &query.limit {
q.push(format!("limit={}", urlencoding::encode(&v.to_string())));
}
if let Some(v) = &query.pagination_token {
q.push(format!(
"paginationToken={}",
urlencoding::encode(&v.to_string())
));
}
if !q.is_empty() {
path.push('?');
path.push_str(&q.join("&"));
}
}
self.client
.request::<ListExchangesResponse>(reqwest::Method::GET, &path, None, false)
.await
}
pub async fn create_exchange(
&self,
body: CreateExchangeRequest,
) -> Result<CreateExchangeResponse, crate::error::Error> {
let path = String::from("/exchanges");
let body = serde_json::to_value(&body)?;
self.client
.request::<CreateExchangeResponse>(reqwest::Method::POST, &path, Some(&body), true)
.await
}
pub async fn list_accounts(
&self,
exchange_id: String,
query: Option<ListAccountsQuery>,
) -> Result<ListAccountsResponse, crate::error::Error> {
let mut path = format!("/exchanges/{}/accounts", urlencoding::encode(&exchange_id));
if let Some(query) = &query {
let mut q: Vec<String> = Vec::new();
if let Some(v) = &query.limit {
q.push(format!("limit={}", urlencoding::encode(&v.to_string())));
}
if let Some(v) = &query.pagination_token {
q.push(format!(
"paginationToken={}",
urlencoding::encode(&v.to_string())
));
}
if !q.is_empty() {
path.push('?');
path.push_str(&q.join("&"));
}
}
self.client
.request::<ListAccountsResponse>(reqwest::Method::GET, &path, None, false)
.await
}
pub async fn list_account_assets(
&self,
exchange_id: String,
account_id: String,
query: Option<ListAccountAssetsQuery>,
) -> Result<ListAccountAssetsResponse, crate::error::Error> {
let mut path = format!(
"/exchanges/{}/accounts/{}/assets",
urlencoding::encode(&exchange_id),
urlencoding::encode(&account_id)
);
if let Some(query) = &query {
let mut q: Vec<String> = Vec::new();
if let Some(v) = &query.limit {
q.push(format!("limit={}", urlencoding::encode(&v.to_string())));
}
if let Some(v) = &query.pagination_token {
q.push(format!(
"paginationToken={}",
urlencoding::encode(&v.to_string())
));
}
if !q.is_empty() {
path.push('?');
path.push_str(&q.join("&"));
}
}
self.client
.request::<ListAccountAssetsResponse>(reqwest::Method::GET, &path, None, false)
.await
}
pub async fn list_asset_withdrawal_networks(
&self,
exchange_id: String,
account_id: String,
asset: String,
) -> Result<serde_json::Value, crate::error::Error> {
let path = format!(
"/exchanges/{}/accounts/{}/assets/{}/withdrawal-networks",
urlencoding::encode(&exchange_id),
urlencoding::encode(&account_id),
urlencoding::encode(&asset)
);
self.client
.request::<serde_json::Value>(reqwest::Method::GET, &path, None, false)
.await
}
pub async fn create_exchange_deposit(
&self,
exchange_id: String,
account_id: String,
body: CreateExchangeDepositRequest,
) -> Result<CreateExchangeDepositResponse, crate::error::Error> {
let path = format!(
"/exchanges/{}/accounts/{}/deposits",
urlencoding::encode(&exchange_id),
urlencoding::encode(&account_id)
);
let body = serde_json::to_value(&body)?;
self.client
.request::<CreateExchangeDepositResponse>(
reqwest::Method::POST,
&path,
Some(&body),
true,
)
.await
}
pub async fn create_exchange_withdrawal(
&self,
exchange_id: String,
account_id: String,
body: CreateExchangeWithdrawalRequest,
) -> Result<CreateExchangeWithdrawalResponse, crate::error::Error> {
let path = format!(
"/exchanges/{}/accounts/{}/withdrawals",
urlencoding::encode(&exchange_id),
urlencoding::encode(&account_id)
);
let body = serde_json::to_value(&body)?;
self.client
.request::<CreateExchangeWithdrawalResponse>(
reqwest::Method::POST,
&path,
Some(&body),
true,
)
.await
}
}