classic_bindings/
query.rs1use cosmwasm_schema::{cw_serde, QueryResponses};
2use cosmwasm_std::{Coin, CustomQuery, Decimal, Uint128};
3
4impl CustomQuery for TerraQuery {}
5
6#[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#[cw_serde]
54pub struct SwapResponse {
55 pub receive: Coin,
56}
57
58#[cw_serde]
60pub struct TaxRateResponse {
61 pub rate: Decimal,
62}
63
64#[cw_serde]
66pub struct TaxCapResponse {
67 pub cap: Uint128,
68}
69
70#[cw_serde]
72pub struct ExchangeRateItem {
73 pub quote_denom: String,
74 pub exchange_rate: Decimal,
75}
76
77#[cw_serde]
79pub struct ExchangeRatesResponse {
80 pub base_denom: String,
81 pub exchange_rates: Vec<ExchangeRateItem>,
82}