stargaze_royalty_registry/
query.rs

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