1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[cfg(feature = "stargate")]
use crate::Binary;
use crate::Empty;
mod bank;
mod ibc;
mod staking;
mod wasm;
pub use bank::{AllBalanceResponse, BalanceResponse, BankQuery};
#[cfg(feature = "stargate")]
pub use ibc::{ChannelResponse, IbcQuery, ListChannelsResponse, PortIdResponse};
#[cfg(feature = "staking")]
pub use staking::{
AllDelegationsResponse, AllValidatorsResponse, BondedDenomResponse, Delegation,
DelegationResponse, FullDelegation, StakingQuery, Validator, ValidatorResponse,
};
pub use wasm::{ContractInfoResponse, WasmQuery};
#[non_exhaustive]
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryRequest<C> {
Bank(BankQuery),
Custom(C),
#[cfg(feature = "staking")]
Staking(StakingQuery),
/// A Stargate query is encoded the same way as abci_query, with path and protobuf encoded request data.
/// The format is defined in [ADR-21](https://github.com/cosmos/cosmos-sdk/blob/master/docs/architecture/adr-021-protobuf-query-encoding.md).
/// The response is protobuf encoded data directly without a JSON response wrapper.
/// The caller is responsible for compiling the proper protobuf definitions for both requests and responses.
#[cfg(feature = "stargate")]
Stargate {
/// this is the fully qualified service path used for routing,
/// eg. custom/cosmos_sdk.x.bank.v1.Query/QueryBalance
path: String,
/// this is the expected protobuf message type (not any), binary encoded
data: Binary,
},
#[cfg(feature = "stargate")]
Ibc(IbcQuery),
Wasm(WasmQuery),
}
/// A trait that is required to avoid conflicts with other query types like BankQuery and WasmQuery
/// in generic implementations.
/// You need to implement it in your custom query type.
///
/// # Examples
///
/// ```
/// # use cosmwasm_std::CustomQuery;
/// # use schemars::JsonSchema;
/// # use serde::{Deserialize, Serialize};
/// #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
/// #[serde(rename_all = "snake_case")]
/// pub enum MyCustomQuery {
/// Ping {},
/// Capitalized { text: String },
/// }
///
/// impl CustomQuery for MyCustomQuery {}
/// ```
pub trait CustomQuery: Serialize + Clone {}
// We require `Clone` because `Clone` in `QueryRequest<C>` is only derived for
// `C: Clone` and we want consistent behaviour for all `QueryRequest<C>`
impl CustomQuery for Empty {}
impl<C: CustomQuery> From<BankQuery> for QueryRequest<C> {
fn from(msg: BankQuery) -> Self {
QueryRequest::Bank(msg)
}
}
impl<C: CustomQuery> From<C> for QueryRequest<C> {
fn from(msg: C) -> Self {
QueryRequest::Custom(msg)
}
}
#[cfg(feature = "staking")]
impl<C: CustomQuery> From<StakingQuery> for QueryRequest<C> {
fn from(msg: StakingQuery) -> Self {
QueryRequest::Staking(msg)
}
}
impl<C: CustomQuery> From<WasmQuery> for QueryRequest<C> {
fn from(msg: WasmQuery) -> Self {
QueryRequest::Wasm(msg)
}
}
#[cfg(feature = "stargate")]
impl<C: CustomQuery> From<IbcQuery> for QueryRequest<C> {
fn from(msg: IbcQuery) -> Self {
QueryRequest::Ibc(msg)
}
}