hpl_interface/hook/
fee.rs

1use cosmwasm_schema::{cw_serde, QueryResponses};
2use cosmwasm_std::{Addr, Coin};
3
4use crate::ownable::{OwnableMsg, OwnableQueryMsg};
5
6use super::{HookQueryMsg, PostDispatchMsg};
7
8pub const TREE_DEPTH: usize = 32;
9
10#[cw_serde]
11pub struct InstantiateMsg {
12    pub owner: String,
13    pub fee: Coin,
14}
15
16#[cw_serde]
17pub enum ExecuteMsg {
18    Ownable(OwnableMsg),
19    PostDispatch(PostDispatchMsg),
20    FeeHook(FeeHookMsg),
21}
22
23#[cw_serde]
24pub enum FeeHookMsg {
25    SetFee {
26        fee: Coin,
27    },
28    Claim {
29        recipient: Option<Addr>
30    }
31}
32
33#[cw_serde]
34#[derive(QueryResponses)]
35#[query_responses(nested)]
36pub enum QueryMsg {
37    Ownable(OwnableQueryMsg),
38    Hook(HookQueryMsg),
39    FeeHook(FeeHookQueryMsg),
40}
41
42#[cw_serde]
43#[derive(QueryResponses)]
44pub enum FeeHookQueryMsg {
45    #[returns(FeeResponse)]
46    Fee {}
47}
48
49#[cw_serde]
50pub struct FeeResponse {
51    pub fee: Coin,
52}
53
54#[cfg(test)]
55mod test {
56    use cosmwasm_std::HexBinary;
57
58    use super::*;
59    use crate::{
60        hook::{ExpectedHookQueryMsg, PostDispatchMsg, QuoteDispatchMsg},
61        msg_checker,
62    };
63
64    #[test]
65    fn test_hook_interface() {
66        let _checked: ExecuteMsg = msg_checker(
67            PostDispatchMsg {
68                metadata: HexBinary::default(),
69                message: HexBinary::default(),
70            }
71            .wrap(),
72        );
73
74        let _checked: QueryMsg = msg_checker(ExpectedHookQueryMsg::Hook(HookQueryMsg::Mailbox {}));
75        let _checked: QueryMsg = msg_checker(
76            QuoteDispatchMsg {
77                metadata: HexBinary::default(),
78                message: HexBinary::default(),
79            }
80            .request(),
81        );
82    }
83}