andromeda_std/ado_contract/
query.rs

1use 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}