Skip to main content

tg4_group/
msg.rs

1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4use tg4::Member;
5
6#[derive(Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema, Debug)]
7#[serde(rename_all = "snake_case")]
8pub struct InstantiateMsg {
9    /// The admin is the only account that can update the group state.
10    /// Omit it to make the group immutable.
11    pub admin: Option<String>,
12    pub members: Vec<Member>,
13}
14
15#[derive(Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema, Debug)]
16#[serde(rename_all = "snake_case")]
17pub enum ExecuteMsg {
18    /// Change the admin
19    UpdateAdmin { admin: Option<String> },
20    /// apply a diff to the existing members.
21    /// remove is applied after add, so if an address is in both, it is removed
22    UpdateMembers {
23        remove: Vec<String>,
24        add: Vec<Member>,
25    },
26    /// Add a new hook to be informed of all membership changes. Must be called by Admin
27    AddHook { addr: String },
28    /// Remove a hook. Must be called by Admin
29    RemoveHook { addr: String },
30}
31
32#[derive(Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema, Debug)]
33#[serde(rename_all = "snake_case")]
34pub enum QueryMsg {
35    /// Return AdminResponse
36    Admin {},
37    /// Return TotalPointsResponse
38    TotalPoints {},
39    /// Returns MembersListResponse
40    ListMembers {
41        start_after: Option<String>,
42        limit: Option<u32>,
43    },
44    /// Returns MemberResponse
45    Member {
46        addr: String,
47        at_height: Option<u64>,
48    },
49    /// Shows all registered hooks. Returns HooksResponse.
50    Hooks {},
51}