stargaze_royalty_registry/
query.rs1use crate::{
2 msg::{QueryMsg, RoyaltyPaymentResponse},
3 state::{
4 Config, RoyaltyDefault, RoyaltyProtocol, RoyaltyProtocolKey, CONFIG, ROYALTY_DEFAULTS,
5 ROYALTY_PROTOCOLS,
6 },
7};
8
9use cosmwasm_std::{to_binary, Addr, Binary, Deps, Env, StdResult};
10use cw_utils::maybe_addr;
11use sg_index_query::{QueryOptions, QueryOptionsInternal};
12
13#[cfg(not(feature = "library"))]
14use cosmwasm_std::entry_point;
15
16#[cfg_attr(not(feature = "library"), entry_point)]
17pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
18 let api = deps.api;
19
20 match msg {
21 QueryMsg::Config {} => to_binary(&query_config(deps)?),
22 QueryMsg::CollectionRoyaltyDefault { collection } => to_binary(
23 &query_collection_royalty_default(deps, api.addr_validate(&collection)?)?,
24 ),
25 QueryMsg::CollectionRoyaltyProtocol {
26 collection,
27 protocol,
28 } => to_binary(&query_collection_royalty_protocol(
29 deps,
30 api.addr_validate(&collection)?,
31 api.addr_validate(&protocol)?,
32 )?),
33 QueryMsg::RoyaltyProtocolByCollection {
34 collection,
35 query_options,
36 } => to_binary(&query_royalty_protocol_by_collection(
37 deps,
38 api.addr_validate(&collection)?,
39 query_options.unwrap_or_default(),
40 )?),
41 QueryMsg::RoyaltyPayment {
42 collection,
43 protocol,
44 } => to_binary(&query_royalty_payment(
45 deps,
46 api.addr_validate(&collection)?,
47 maybe_addr(api, protocol)?,
48 )?),
49 }
50}
51
52pub fn query_config(deps: Deps) -> StdResult<Config> {
53 let config = CONFIG.load(deps.storage)?;
54 Ok(config)
55}
56
57pub fn query_collection_royalty_default(
58 deps: Deps,
59 collection: Addr,
60) -> StdResult<Option<RoyaltyDefault>> {
61 let royalty_default = ROYALTY_DEFAULTS.may_load(deps.storage, collection)?;
62 Ok(royalty_default)
63}
64
65pub fn query_collection_royalty_protocol(
66 deps: Deps,
67 collection: Addr,
68 protocol: Addr,
69) -> StdResult<Option<RoyaltyProtocol>> {
70 let royalty_protocol_key: RoyaltyProtocolKey = (collection, protocol);
71 let royalty_protocol = ROYALTY_PROTOCOLS.may_load(deps.storage, royalty_protocol_key)?;
72 Ok(royalty_protocol)
73}
74
75pub fn query_royalty_protocol_by_collection(
76 deps: Deps,
77 collection: Addr,
78 query_options: QueryOptions<String>,
79) -> StdResult<Vec<RoyaltyProtocol>> {
80 let QueryOptionsInternal {
81 limit,
82 order,
83 min,
84 max,
85 } = query_options.unpack(
86 &Box::new(|sa: &String| Addr::unchecked(sa.clone())),
87 None,
88 None,
89 );
90
91 let royalty_protocols: Vec<RoyaltyProtocol> = ROYALTY_PROTOCOLS
92 .prefix(collection)
93 .range(deps.storage, min, max, order)
94 .take(limit)
95 .map(|item| item.map(|(_, v)| v))
96 .collect::<StdResult<_>>()?;
97
98 Ok(royalty_protocols)
99}
100
101pub fn query_royalty_payment(
102 deps: Deps,
103 collection: Addr,
104 protocol: Option<Addr>,
105) -> StdResult<RoyaltyPaymentResponse> {
106 let royalty_default = ROYALTY_DEFAULTS.may_load(deps.storage, collection.clone())?;
107
108 let mut royalty_protocol = None;
109 if let Some(protocol_val) = &protocol {
110 let royalty_protocol_key: RoyaltyProtocolKey = (collection, protocol_val.clone());
111 royalty_protocol = ROYALTY_PROTOCOLS.may_load(deps.storage, royalty_protocol_key)?;
112 }
113
114 Ok(RoyaltyPaymentResponse {
115 royalty_default,
116 royalty_protocol,
117 })
118}