maestro-rust-sdk 1.1.2

Rust SDK for the Maestro Dapp Platform
Documentation
use super::maestro::Maestro;
use crate::{
    models::asset::{
        AccountsHoldingAsset, AddressesHoldingAsset, AssetInformations, AssetTransactions,
        AssetUpdates, AssetUtxos,
    },
    utils::Parameters,
};
use std::error::Error;

impl Maestro {
    pub async fn accounts_holding_asset(
        &self,
        asset_id: &str,
        params: Option<&Parameters>,
    ) -> Result<AccountsHoldingAsset, Box<dyn Error>> {
        let formatted_params = params.map_or_else(|| "".to_string(), |p| p.format());
        let url = format!("/assets/{}/accounts{}", asset_id, formatted_params);
        let resp = self.get(&url).await?;
        let accounts_holding_asset =
            serde_json::from_str(&resp).map_err(|e| Box::new(e) as Box<dyn Error>)?;
        Ok(accounts_holding_asset)
    }

    pub async fn address_holding_asset(
        &self,
        asset_id: &str,
        params: Option<&Parameters>,
    ) -> Result<AddressesHoldingAsset, Box<dyn Error>> {
        let formatted_params = params.map_or_else(|| "".to_string(), |p| p.format());
        let url = format!("/assets/{}/addresses{}", asset_id, formatted_params);
        let resp = self.get(&url).await?;
        let addresses_holding_asset =
            serde_json::from_str(&resp).map_err(|e| Box::new(e) as Box<dyn Error>)?;
        Ok(addresses_holding_asset)
    }

    pub async fn asset(&self, asset_id: &str) -> Result<AssetInformations, Box<dyn Error>> {
        let url = format!("/assets/{}", asset_id);
        let resp = self.get(&url).await?;
        let asset_information =
            serde_json::from_str(&resp).map_err(|e| Box::new(e) as Box<dyn Error>)?;
        Ok(asset_information)
    }

    pub async fn asset_transactions(
        &self,
        asset_id: &str,
        params: Option<&Parameters>,
    ) -> Result<AssetTransactions, Box<dyn Error>> {
        let formatted_params = params.map_or_else(|| "".to_string(), |p| p.format());
        let url = format!("/assets/{}/txs{}", asset_id, formatted_params);
        let resp = self.get(&url).await?;
        let asset_transactions =
            serde_json::from_str(&resp).map_err(|e| Box::new(e) as Box<dyn Error>)?;
        Ok(asset_transactions)
    }

    pub async fn asset_updates(
        &self,
        asset_id: &str,
        params: Option<&Parameters>,
    ) -> Result<AssetUpdates, Box<dyn Error>> {
        let formatted_params = params.map_or_else(|| "".to_string(), |p| p.format());
        let url = format!("/assets/{}/updates{}", asset_id, formatted_params);
        let resp = self.get(&url).await?;
        let asset_updates =
            serde_json::from_str(&resp).map_err(|e| Box::new(e) as Box<dyn Error>)?;
        Ok(asset_updates)
    }

    pub async fn asset_utxos(
        &self,
        asset_id: &str,
        params: Option<&Parameters>,
    ) -> Result<AssetUtxos, Box<dyn Error>> {
        let formatted_params = params.map_or_else(|| "".to_string(), |p| p.format());
        let url = format!("/assets/{}/utxos{}", asset_id, formatted_params);
        let resp = self.get(&url).await?;
        let asset_utxos = serde_json::from_str(&resp).map_err(|e| Box::new(e) as Box<dyn Error>)?;
        Ok(asset_utxos)
    }
}