synnax 0.1.6

Cosmos-SDK multichain client
Documentation
use crate::cosmos::types::Coin;
use crate::lcd::Lcd;
use serde::Deserialize;

#[derive(Deserialize, Clone, Debug, Eq, PartialEq)]
pub struct SendEnabled {
    pub denom: String,
    pub enabled: bool,
}

#[derive(Deserialize, Clone, Debug, Eq, PartialEq)]
pub struct AllBalanceResponse {
    pub balances: Vec<Coin>,
}

#[derive(Deserialize, Clone, Debug, Eq, PartialEq)]
pub struct BalanceResponse {
    pub balance: Coin,
}

#[derive(Deserialize, Clone, Debug, Eq, PartialEq)]
pub struct TotalSupplyResponse {
    pub supply: Vec<Coin>,
}

#[derive(Deserialize, Clone, Debug, Eq, PartialEq)]
pub struct TotalSupplyByDenomResponse {
    pub amount: Coin,
}

#[derive(Deserialize, Clone, Debug, Eq, PartialEq)]
pub struct Params {
    pub send_enabled: Vec<SendEnabled>,
    pub default_send_enabled: bool,
}

#[derive(Deserialize, Clone, Debug, Eq, PartialEq)]
pub struct ParamsResponse {
    pub params: Params,
}

#[derive(Deserialize, Clone, Debug, Eq, PartialEq)]
pub struct DenomUnit {
    pub denom: String,
    pub exponent: u32,
    pub aliases: Vec<String>,
}

#[derive(Deserialize, Clone, Debug, Eq, PartialEq)]
pub struct Metadata {
    pub description: String,
    pub denom_units: Vec<DenomUnit>,
    pub base: String,
    pub display: String,
    pub name: String,
    pub symbol: String,
}

#[derive(Deserialize, Clone, Debug, Eq, PartialEq)]
pub struct DenomsMetadataResponse {
    pub metadatas: Vec<Metadata>,
}

#[derive(Deserialize, Clone, Debug, Eq, PartialEq)]
pub struct DenomMetadataResponse {
    pub metadata: Metadata,
}

pub struct Bank<'a> {
    lcd: &'a Lcd,
}

impl<'a> Bank<'a> {
    pub fn new(lcd: &'a Lcd) -> Self {
        Bank { lcd }
    }

    pub fn balance_by_denom(
        &self,
        address: String,
        denom: String,
    ) -> Result<BalanceResponse, anyhow::Error> {
        self.lcd.get::<BalanceResponse>(format!(
            "/cosmos/bank/v1beta1/balances/{}/by_denom?denom={}",
            address, denom
        ))
    }

    pub fn balances(&self, address: String) -> Result<AllBalanceResponse, anyhow::Error> {
        self.lcd
            .get::<AllBalanceResponse>(format!("/cosmos/bank/v1beta1/balances/{}", address))
    }

    pub fn spendable_balances(&self, address: String) -> Result<AllBalanceResponse, anyhow::Error> {
        self.lcd.get::<AllBalanceResponse>(format!(
            "/cosmos/bank/v1beta1/spendable_balances/{}",
            address
        ))
    }

    pub fn supply(&self) -> Result<TotalSupplyResponse, anyhow::Error> {
        self.lcd
            .get::<TotalSupplyResponse>("/cosmos/bank/v1beta1/supply".to_string())
    }

    pub fn supply_by_denom(
        &self,
        denom: String,
    ) -> Result<TotalSupplyByDenomResponse, anyhow::Error> {
        self.lcd
            .get::<TotalSupplyByDenomResponse>(format!("/cosmos/bank/v1beta1/supply/{}", denom))
    }

    pub fn params(&self) -> Result<ParamsResponse, anyhow::Error> {
        self.lcd
            .get::<ParamsResponse>("/cosmos/bank/v1beta1/params".to_string())
    }

    pub fn denom_metadata_by_denom(
        &self,
        denom: String,
    ) -> Result<DenomMetadataResponse, anyhow::Error> {
        self.lcd
            .get::<DenomMetadataResponse>(format!("/cosmos/bank/v1beta1/denoms_metadata/{}", denom))
    }

    pub fn denom_metadata(&self) -> Result<DenomsMetadataResponse, anyhow::Error> {
        self.lcd
            .get::<DenomsMetadataResponse>("/cosmos/bank/v1beta1/denoms_metadata".to_string())
    }
}