andromeda_std/ado_contract/
query.rs1use crate::ado_contract::state::ADOContract;
2use crate::{
3 ado_base::{
4 ado_type::TypeResponse,
5 block_height::BlockHeightResponse,
6 kernel_address::KernelAddressResponse,
7 ownership::{ContractOwnerResponse, PublisherResponse},
8 version::VersionResponse,
9 AndromedaQuery,
10 },
11 common::encode_binary,
12 error::ContractError,
13};
14use cosmwasm_std::{from_json, to_json_binary, Binary, Deps, Env};
15use cw2::get_contract_version;
16use serde::Serialize;
17
18impl<'a> ADOContract<'a> {
19 #[allow(unreachable_patterns)]
20 pub fn query(
21 &self,
22 deps: Deps,
23 _env: Env,
24 msg: impl Serialize,
25 ) -> Result<Binary, ContractError> {
26 let msg = to_json_binary(&msg)?;
27
28 match from_json::<AndromedaQuery>(&msg) {
29 Ok(msg) => match msg {
30 AndromedaQuery::Owner {} => encode_binary(&self.query_contract_owner(deps)?),
31 AndromedaQuery::OriginalPublisher {} => {
32 encode_binary(&self.query_original_publisher(deps)?)
33 }
34 AndromedaQuery::Type {} => encode_binary(&self.query_type(deps)?),
35 AndromedaQuery::BlockHeightUponCreation {} => {
36 encode_binary(&self.query_block_height_upon_creation(deps)?)
37 }
38 AndromedaQuery::KernelAddress {} => {
39 encode_binary(&self.query_kernel_address(deps)?)
40 }
41 AndromedaQuery::Version {} => encode_binary(&self.query_version(deps)?),
42 AndromedaQuery::OwnershipRequest {} => {
43 encode_binary(&self.ownership_request(deps.storage)?)
44 }
45 #[cfg(feature = "modules")]
46 AndromedaQuery::Module { id } => encode_binary(&self.query_module(deps, id)?),
47 #[cfg(feature = "modules")]
48 AndromedaQuery::ModuleIds {} => encode_binary(&self.query_module_ids(deps)?),
49 AndromedaQuery::AppContract {} => {
50 encode_binary(&self.get_app_contract(deps.storage)?)
51 }
52 AndromedaQuery::Permissions {
53 actor,
54 limit,
55 start_after,
56 } => encode_binary(&self.query_permissions(deps, actor, limit, start_after)?),
57 AndromedaQuery::PermissionedActions {} => {
58 encode_binary(&self.query_permissioned_actions(deps)?)
59 }
60 _ => Err(ContractError::UnsupportedOperation {}),
61 },
62 Err(_) => Err(ContractError::UnsupportedOperation {}),
63 }
64 }
65}
66
67impl<'a> ADOContract<'a> {
68 #[inline]
69 pub fn query_contract_owner(&self, deps: Deps) -> Result<ContractOwnerResponse, ContractError> {
70 let owner = self.owner.load(deps.storage)?;
71
72 Ok(ContractOwnerResponse {
73 owner: owner.to_string(),
74 })
75 }
76
77 #[inline]
78 pub fn query_kernel_address(&self, deps: Deps) -> Result<KernelAddressResponse, ContractError> {
79 let kernel_address = self.kernel_address.load(deps.storage)?;
80 Ok(KernelAddressResponse { kernel_address })
81 }
82
83 #[inline]
84 pub fn query_original_publisher(&self, deps: Deps) -> Result<PublisherResponse, ContractError> {
85 let original_publisher = self.original_publisher.load(deps.storage)?.to_string();
86 Ok(PublisherResponse { original_publisher })
87 }
88
89 #[inline]
90 pub fn query_block_height_upon_creation(
91 &self,
92 deps: Deps,
93 ) -> Result<BlockHeightResponse, ContractError> {
94 let block_height = self.block_height.load(deps.storage)?;
95 Ok(BlockHeightResponse { block_height })
96 }
97
98 #[inline]
99 pub fn query_type(&self, deps: Deps) -> Result<TypeResponse, ContractError> {
100 let ado_type = self.ado_type.load(deps.storage)?;
101 Ok(TypeResponse { ado_type })
102 }
103
104 #[inline]
105 pub fn query_version(&self, deps: Deps) -> Result<VersionResponse, ContractError> {
106 let contract_version = get_contract_version(deps.storage)?;
107 Ok(VersionResponse {
108 version: contract_version.version,
109 })
110 }
111}