bitgo_api 0.2.1

Rust implimentation for Bitgo api
Documentation
use crate::client::BitGoClient;
use crate::error::Result;
use async_trait::async_trait;
use serde_json::json;


#[async_trait]
pub trait BitGoTransferAPI {
    async fn get_transaction(
        &self,
        wallet_id: &str,
        identifier: &str,
        transfer_id: &str,
    ) -> Result<serde_json::Value>;

    async fn transfer_list(&self, wallet_id: &str, identifier: &str) -> Result<serde_json::Value>;
    async fn get_fee(
        &self,
        identifier: &str,
        num_blocks: &i32,
        recipient: &str,
        data: &str,
        amount: &str,
        hop: bool,
    ) -> Result<serde_json::Value>;
    async fn change_fee(
        &self,
        identifier: &str,
        wallet_id: &str,
        tx_id: &str,
        fee: &str,
    ) -> Result<serde_json::Value>;
}

#[async_trait]
impl BitGoTransferAPI for BitGoClient {
    async fn get_transaction(
        &self,
        wallet_id: &str,
        identifier: &str,
        transfer_id: &str,
    ) -> Result<serde_json::Value> {
        let request_url = format!(
            "{url}/api/v2/{coin_type}/wallet/{wallet_id}/transfer/{transfer_id}",
            url = self.endpoint,
            coin_type = identifier,
            wallet_id = wallet_id,
            transfer_id = transfer_id,
        );
        self.get_api(&request_url, &json!({})).await
    }

    async fn transfer_list(&self, wallet_id: &str, identifier: &str) -> Result<serde_json::Value> {
        let request_url = format!(
            "{url}/api/v2/{coin_type}/wallet/{wallet_id}/transfer",
            url = self.endpoint,
            coin_type = identifier,
            wallet_id = wallet_id,
        );
        self.get_api(&request_url, &json!({})).await
    }

    async fn get_fee(
        &self,
        identifier: &str,
        num_blocks: &i32,
        recipient: &str,
        data: &str,
        amount: &str,
        hop: bool,
    ) -> Result<serde_json::Value> {
        let request_url = format!(
            "{url}/api/v2/{coin_type}/tx/fee",
            url = self.endpoint,
            coin_type = identifier,
        );
        self.get_api(
            &request_url,
            &json!({
                "numBlocks":num_blocks,
                "recipient":recipient,
                "data":data,
                "amount":amount,
                "hop":hop,
            }),
        )
        .await
    }

    async fn change_fee(
        &self,
        identifier: &str,
        wallet_id: &str,
        tx_id: &str,
        fee: &str,
    ) -> Result<serde_json::Value> {
        let request_url = format!(
            "{url}/api/v2/{coin_type}/wallet/{wallet_id}/tx/changeFee",
            url = self.endpoint,
            coin_type = identifier,
            wallet_id = wallet_id,
        );
        self.post_api(&request_url, &json!({"txid":tx_id,"fee":fee}))
            .await
    }
}