cw4/
query.rs

1use cosmwasm_schema::cw_serde;
2
3#[cw_serde]
4
5pub enum Cw4QueryMsg {
6    /// Return AdminResponse
7    Admin {},
8    /// Return TotalWeightResponse
9    TotalWeight { at_height: Option<u64> },
10    /// Returns MembersListResponse
11    ListMembers {
12        start_after: Option<String>,
13        limit: Option<u32>,
14    },
15    /// Returns MemberResponse
16    Member {
17        addr: String,
18        at_height: Option<u64>,
19    },
20    /// Shows all registered hooks. Returns HooksResponse.
21    Hooks {},
22}
23
24#[cw_serde]
25pub struct AdminResponse {
26    pub admin: Option<String>,
27}
28
29/// A group member has a weight associated with them.
30/// This may all be equal, or may have meaning in the app that
31/// makes use of the group (eg. voting power)
32#[cw_serde]
33pub struct Member {
34    pub addr: String,
35    pub weight: u64,
36}
37
38#[cw_serde]
39pub struct MemberListResponse {
40    pub members: Vec<Member>,
41}
42
43#[cw_serde]
44pub struct MemberResponse {
45    pub weight: Option<u64>,
46}
47
48#[cw_serde]
49pub struct TotalWeightResponse {
50    pub weight: u64,
51}
52
53#[cw_serde]
54pub struct HooksResponse {
55    pub hooks: Vec<String>,
56}
57
58/// TOTAL_KEY is meant for raw queries
59pub const TOTAL_KEY: &str = "total";
60pub const TOTAL_KEY_CHECKPOINTS: &str = "total__checkpoints";
61pub const TOTAL_KEY_CHANGELOG: &str = "total__changelog";
62pub const MEMBERS_KEY: &str = "members";
63pub const MEMBERS_CHECKPOINTS: &str = "members__checkpoints";
64pub const MEMBERS_CHANGELOG: &str = "members__changelog";
65
66/// member_key is meant for raw queries for one member, given address
67pub fn member_key(address: &str) -> Vec<u8> {
68    // FIXME: Inlined here to avoid storage-plus import
69    let mut key = [b"\x00", &[MEMBERS_KEY.len() as u8], MEMBERS_KEY.as_bytes()].concat();
70    key.extend_from_slice(address.as_bytes());
71    key
72}