classic_bindings/
query.rs

1use cosmwasm_schema::{cw_serde, QueryResponses};
2use cosmwasm_std::{Coin, CustomQuery, Decimal, Uint128};
3
4impl CustomQuery for TerraQuery {}
5
6// TerraQuery for custom bindings
7#[cw_serde]
8#[derive(QueryResponses)]
9pub enum TerraQuery {
10    #[returns(SwapResponse)]
11    Swap {
12        offer_coin: Coin,
13        ask_denom: String,
14    },
15    #[returns(TaxRateResponse)]
16    TaxRate {},
17    #[returns(TaxCapResponse)]
18    TaxCap {
19        denom: String,
20    },
21    #[returns(ExchangeRatesResponse)]
22    ExchangeRates {
23        base_denom: String,
24        quote_denoms: Vec<String>,
25    },
26}
27
28impl TerraQuery {
29    pub fn swap(offer_coin: Coin, ask_denom: String) -> Self {
30        TerraQuery::Swap {
31            offer_coin,
32            ask_denom,
33        }
34    }
35
36    pub fn tax_rate() -> Self {
37        TerraQuery::TaxRate {}
38    }
39
40    pub fn tax_cap(denom: String) -> Self {
41        TerraQuery::TaxCap { denom }
42    }
43
44    pub fn exchange_rates(base_denom: String, quote_denoms: Vec<String>) -> Self {
45        TerraQuery::ExchangeRates {
46            base_denom,
47            quote_denoms,
48        }
49    }
50}
51
52/// SwapResponse is data format returned from SwapRequest::Simulate query
53#[cw_serde]
54pub struct SwapResponse {
55    pub receive: Coin,
56}
57
58/// TaxRateResponse is data format returned from TreasuryRequest::TaxRate query
59#[cw_serde]
60pub struct TaxRateResponse {
61    pub rate: Decimal,
62}
63
64/// TaxCapResponse is data format returned from TreasuryRequest::TaxCap query
65#[cw_serde]
66pub struct TaxCapResponse {
67    pub cap: Uint128,
68}
69
70/// ExchangeRateItem is data format returned from OracleRequest::ExchangeRates query
71#[cw_serde]
72pub struct ExchangeRateItem {
73    pub quote_denom: String,
74    pub exchange_rate: Decimal,
75}
76
77/// ExchangeRatesResponse is data format returned from OracleRequest::ExchangeRates query
78#[cw_serde]
79pub struct ExchangeRatesResponse {
80    pub base_denom: String,
81    pub exchange_rates: Vec<ExchangeRateItem>,
82}