hpl_interface/hook/
mod.rs1pub mod aggregate;
2pub mod merkle;
3pub mod pausable;
4pub mod routing;
5pub mod routing_custom;
6pub mod routing_fallback;
7pub mod fee;
8
9use cosmwasm_schema::{cw_serde, QueryResponses};
10use cosmwasm_std::{
11 wasm_execute, Coin, CustomQuery, HexBinary, QuerierWrapper, StdResult, WasmMsg,
12};
13
14#[cw_serde]
15pub struct PostDispatchMsg {
16 pub metadata: HexBinary,
17 pub message: HexBinary,
18}
19
20impl PostDispatchMsg {
21 pub fn wrap(self) -> ExpectedHookMsg {
22 ExpectedHookMsg::PostDispatch(self)
23 }
24}
25
26#[cw_serde]
27#[derive(Default)]
28pub struct QuoteDispatchMsg {
29 pub metadata: HexBinary,
30 pub message: HexBinary,
31}
32
33impl QuoteDispatchMsg {
34 pub fn wrap(self) -> HookQueryMsg {
35 HookQueryMsg::QuoteDispatch(self)
36 }
37
38 pub fn request(self) -> ExpectedHookQueryMsg {
39 ExpectedHookQueryMsg::Hook(self.wrap())
40 }
41}
42
43#[cw_serde]
45pub enum ExpectedHookMsg {
46 PostDispatch(PostDispatchMsg),
47}
48
49#[cw_serde]
50#[derive(QueryResponses)]
51pub enum HookQueryMsg {
52 #[returns(QuoteDispatchResponse)]
53 QuoteDispatch(QuoteDispatchMsg),
54
55 #[returns(MailboxResponse)]
56 Mailbox {},
57}
58
59#[cw_serde]
60#[derive(QueryResponses)]
61#[query_responses(nested)]
62pub enum ExpectedHookQueryMsg {
63 Hook(HookQueryMsg),
64}
65
66#[cw_serde]
67pub struct MailboxResponse {
68 pub mailbox: String,
69}
70
71#[cw_serde]
72pub struct QuoteDispatchResponse {
73 pub fees: Vec<Coin>,
74}
75
76pub fn post_dispatch(
77 hook: impl Into<String>,
78 metadata: impl Into<HexBinary>,
79 message: impl Into<HexBinary>,
80 funds: Option<Vec<Coin>>,
81) -> StdResult<WasmMsg> {
82 wasm_execute(
83 hook,
84 &PostDispatchMsg {
85 metadata: metadata.into(),
86 message: message.into(),
87 }
88 .wrap(),
89 funds.unwrap_or_default(),
90 )
91}
92
93pub fn quote_dispatch<C: CustomQuery>(
94 querier: &QuerierWrapper<C>,
95 hook: impl Into<String>,
96 metadata: impl Into<HexBinary>,
97 message: impl Into<HexBinary>,
98) -> StdResult<QuoteDispatchResponse> {
99 querier.query_wasm_smart(
100 hook,
101 &QuoteDispatchMsg {
102 metadata: metadata.into(),
103 message: message.into(),
104 }
105 .request(),
106 )
107}