hpl_interface/hook/
routing_custom.rs1use 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}