hpl_interface/hook/
mod.rs

1pub 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/// This is the basic message to demonstrate the required interface
44#[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}