1use cosmwasm_schema::cw_serde;
2use cosmwasm_std::{to_json_binary, Binary, CosmosMsg, StdResult, WasmMsg};
3
4#[cw_serde]
10pub struct MemberDiff {
11 pub key: String,
12 pub old: Option<u64>,
13 pub new: Option<u64>,
14}
15
16impl MemberDiff {
17 pub fn new<T: Into<String>>(addr: T, old_weight: Option<u64>, new_weight: Option<u64>) -> Self {
18 MemberDiff {
19 key: addr.into(),
20 old: old_weight,
21 new: new_weight,
22 }
23 }
24}
25
26#[cw_serde]
29pub struct MemberChangedHookMsg {
30 pub diffs: Vec<MemberDiff>,
31}
32
33impl MemberChangedHookMsg {
34 pub fn one(diff: MemberDiff) -> Self {
35 MemberChangedHookMsg { diffs: vec![diff] }
36 }
37
38 pub fn new(diffs: Vec<MemberDiff>) -> Self {
39 MemberChangedHookMsg { diffs }
40 }
41
42 pub fn into_json_binary(self) -> StdResult<Binary> {
44 let msg = MemberChangedExecuteMsg::MemberChangedHook(self);
45 to_json_binary(&msg)
46 }
47
48 pub fn into_cosmos_msg<T: Into<String>>(self, contract_addr: T) -> StdResult<CosmosMsg> {
50 let msg = self.into_json_binary()?;
51 let execute = WasmMsg::Execute {
52 contract_addr: contract_addr.into(),
53 msg,
54 funds: vec![],
55 };
56 Ok(execute.into())
57 }
58}
59
60#[cw_serde]
62
63enum MemberChangedExecuteMsg {
64 MemberChangedHook(MemberChangedHookMsg),
65}