hpl_interface/warp/
native.rs

1use cosmwasm_schema::{cw_serde, QueryResponses};
2use cosmwasm_std::{HexBinary, Uint128};
3
4use crate::{
5    connection::{ConnectionMsg, ConnectionQueryMsg},
6    core,
7    ism::IsmSpecifierQueryMsg,
8    ownable::{OwnableMsg, OwnableQueryMsg},
9    router::{RouterMsg, RouterQuery},
10};
11
12use super::{TokenModeMsg, TokenWarpDefaultQueryMsg};
13
14#[cw_serde]
15pub struct DenomUnit {
16    pub denom: String,
17    #[serde(
18        serialize_with = "as_str::serialize",
19        deserialize_with = "as_str::deserialize"
20    )]
21    pub exponent: u32,
22    pub aliases: Vec<String>,
23}
24
25#[cw_serde]
26pub struct Metadata {
27    pub description: String,
28    pub denom_units: Vec<DenomUnit>,
29    pub base: String,
30    pub display: String,
31    pub name: String,
32    pub symbol: String,
33}
34
35#[cw_serde]
36pub struct NativeModeBriged {
37    pub denom: String,
38    pub metadata: Option<Metadata>,
39}
40
41#[cw_serde]
42pub struct NativeModeCollateral {
43    pub denom: String,
44}
45
46#[cw_serde]
47pub struct InstantiateMsg {
48    pub token: TokenModeMsg<NativeModeBriged, NativeModeCollateral>,
49
50    pub hrp: String,
51    pub owner: String,
52    pub mailbox: String,
53}
54
55#[cw_serde]
56pub enum ExecuteMsg {
57    Ownable(OwnableMsg),
58    Router(RouterMsg<HexBinary>),
59    Connection(ConnectionMsg),
60
61    // handle transfer remote
62    Handle(core::HandleMsg),
63
64    // transfer to remote
65    TransferRemote {
66        dest_domain: u32,
67        recipient: HexBinary,
68        amount: Uint128,
69    },
70}
71
72#[cw_serde]
73#[derive(QueryResponses)]
74#[query_responses(nested)]
75pub enum QueryMsg {
76    Ownable(OwnableQueryMsg),
77
78    Router(RouterQuery<HexBinary>),
79
80    Connection(ConnectionQueryMsg),
81
82    TokenDefault(TokenWarpDefaultQueryMsg),
83
84    IsmSpecifier(IsmSpecifierQueryMsg),
85}
86
87mod as_str {
88    use serde::{de, Deserialize, Deserializer, Serializer};
89    use std::{fmt::Display, str::FromStr};
90
91    pub fn deserialize<'de, T, D>(deserializer: D) -> Result<T, D::Error>
92    where
93        T: FromStr,
94        T::Err: Display,
95        D: Deserializer<'de>,
96    {
97        let s = String::deserialize(deserializer)?;
98        T::from_str(&s).map_err(de::Error::custom)
99    }
100
101    pub fn serialize<S, T>(value: &T, serializer: S) -> Result<S::Ok, S::Error>
102    where
103        S: Serializer,
104        T: Display,
105    {
106        serializer.serialize_str(&value.to_string())
107    }
108}