hpl_interface/hook/
routing_custom.rs

1use cosmwasm_schema::{cw_serde, QueryResponses};
2use cosmwasm_std::Addr;
3
4use crate::{
5    ownable::{OwnableMsg, OwnableQueryMsg},
6    router::{RouterMsg, RouterQuery},
7    Order,
8};
9
10use super::{HookQueryMsg, PostDispatchMsg};
11
12#[cw_serde]
13pub struct InstantiateMsg {
14    pub owner: String,
15}
16
17#[cw_serde]
18pub struct RegisterCustomHookMsg {
19    pub dest_domain: u32,
20    pub recipient: String,
21    pub hook: String,
22}
23
24#[cw_serde]
25pub struct ClearCustomHookMsg {
26    pub dest_domain: u32,
27    pub recipient: String,
28}
29
30#[cw_serde]
31pub enum ExecuteMsg {
32    Ownable(OwnableMsg),
33    PostDispatch(PostDispatchMsg),
34    Router(RouterMsg<Addr>),
35
36    RegisterCustomHook(RegisterCustomHookMsg),
37    RegisterCustomHooks(Vec<RegisterCustomHookMsg>),
38
39    ClearCustomHook(ClearCustomHookMsg),
40    ClearCustomHooks(Vec<ClearCustomHookMsg>),
41}
42
43#[cw_serde]
44#[derive(QueryResponses)]
45#[query_responses(nested)]
46pub enum QueryMsg {
47    Ownable(OwnableQueryMsg),
48    Router(RouterQuery<Addr>),
49    Hook(HookQueryMsg),
50    CustomRoutingHook(CustomRoutingHookQueryMsg),
51}
52
53#[cw_serde]
54#[derive(QueryResponses)]
55pub enum CustomRoutingHookQueryMsg {
56    #[returns(CustomHookResponse)]
57    CustomHook { dest_domain: u32, recipient: String },
58
59    #[returns(CustomHooksResponse)]
60    CustomHooks {
61        dest_domain: u32,
62        offset: Option<String>,
63        limit: Option<u32>,
64        order: Option<Order>,
65    },
66}
67
68#[cw_serde]
69pub struct CustomHookResponse {
70    pub dest_domain: u32,
71    pub recipient: String,
72    pub hook: String,
73}
74
75#[cw_serde]
76pub struct CustomHooksResponse {
77    pub custom_hooks: Vec<CustomHookResponse>,
78}
79
80#[cfg(test)]
81mod test {
82    use cosmwasm_std::HexBinary;
83
84    use super::*;
85    use crate::{
86        hook::{ExpectedHookQueryMsg, PostDispatchMsg, QuoteDispatchMsg},
87        msg_checker,
88    };
89
90    #[test]
91    fn test_hook_interface() {
92        let _checked: ExecuteMsg = msg_checker(
93            PostDispatchMsg {
94                metadata: HexBinary::default(),
95                message: HexBinary::default(),
96            }
97            .wrap(),
98        );
99
100        let _checked: QueryMsg = msg_checker(ExpectedHookQueryMsg::Hook(HookQueryMsg::Mailbox {}));
101        let _checked: QueryMsg = msg_checker(
102            QuoteDispatchMsg {
103                metadata: HexBinary::default(),
104                message: HexBinary::default(),
105            }
106            .request(),
107        );
108    }
109}