dfns-sdk-rust 0.2.0

Dfns API SDK for Rust
Documentation
// Code generated by rust-sdk-generator. DO NOT EDIT.

pub mod delegated;
pub mod types;

#[allow(unused_imports)]
use types::*;

/// Client for exchanges operations.
#[derive(Clone)]
pub struct ExchangesClient {
    client: crate::client::Client,
}

impl ExchangesClient {
    pub fn new(client: crate::client::Client) -> Self {
        ExchangesClient { client }
    }

    /// Retrieve the details of a specific exchange integration configuration.
    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
    }

    /// Delete the exchange configuration from your organization.
    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
    }

    /// List all configured exchange integrations.
    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
    }

    /// Link your organization with a cryptocurrency exchange.
    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
    }

    /// Get a list of accounts for a specific exchange.
    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
    }

    /// Retrieve the list of assets for a specific account on a specific exchange.
    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
    }

    /// Lists the networks to which the given asset can be withdrawn from an exchange account.
    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
    }

    /// Creates a new exchange deposit transaction.
    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
    }

    /// Creates a new exchange withdrawal transaction.
    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
    }
}