cosmwasm_std/query/
bank.rs1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4use crate::Coin;
5
6#[cfg(feature = "cosmwasm_1_3")]
7use crate::PageRequest;
8use crate::{Binary, DenomMetadata};
9
10use super::query_response::QueryResponseType;
11
12#[non_exhaustive]
13#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
14#[serde(rename_all = "snake_case")]
15pub enum BankQuery {
16 #[cfg(feature = "cosmwasm_1_1")]
20 Supply { denom: String },
21 Balance { address: String, denom: String },
24 AllBalances { address: String },
28 #[cfg(feature = "cosmwasm_1_3")]
31 DenomMetadata { denom: String },
32 #[cfg(feature = "cosmwasm_1_3")]
35 AllDenomMetadata { pagination: Option<PageRequest> },
36}
37
38#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq, JsonSchema)]
39#[serde(rename_all = "snake_case")]
40#[non_exhaustive]
41pub struct SupplyResponse {
42 pub amount: Coin,
45}
46
47impl_response_constructor!(SupplyResponse, amount: Coin);
48
49impl QueryResponseType for SupplyResponse {}
50
51#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq, JsonSchema)]
52#[serde(rename_all = "snake_case")]
53pub struct BalanceResponse {
54 pub amount: Coin,
57}
58
59impl_response_constructor!(BalanceResponse, amount: Coin);
60
61impl QueryResponseType for BalanceResponse {}
62
63#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq, JsonSchema)]
64#[serde(rename_all = "snake_case")]
65pub struct AllBalanceResponse {
66 pub amount: Vec<Coin>,
68}
69
70impl_response_constructor!(AllBalanceResponse, amount: Vec<Coin>);
71
72impl QueryResponseType for AllBalanceResponse {}
73
74#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
75#[serde(rename_all = "snake_case")]
76#[non_exhaustive]
77pub struct DenomMetadataResponse {
78 pub metadata: DenomMetadata,
80}
81
82impl_response_constructor!(DenomMetadataResponse, metadata: DenomMetadata);
83
84impl QueryResponseType for DenomMetadataResponse {}
85
86#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
87#[serde(rename_all = "snake_case")]
88#[non_exhaustive]
89pub struct AllDenomMetadataResponse {
90 pub metadata: Vec<DenomMetadata>,
92 pub next_key: Option<Binary>,
93}
94
95impl_response_constructor!(
96 AllDenomMetadataResponse,
97 metadata: Vec<DenomMetadata>,
98 next_key: Option<Binary>
99);
100
101impl QueryResponseType for AllDenomMetadataResponse {}
102
103#[cfg(test)]
104mod tests {
105 use super::*;
106
107 #[test]
108 fn private_constructor_works() {
109 let response = AllBalanceResponse::new(vec![Coin::new(1234, "uatom")]);
110 assert_eq!(
111 response,
112 AllBalanceResponse {
113 amount: vec![Coin::new(1234, "uatom")]
114 }
115 );
116 }
117}