hpl_interface/warp/
mod.rs

1pub mod cw20;
2pub mod native;
3
4use std::fmt;
5
6use cosmwasm_schema::{cw_serde, QueryResponses};
7use cosmwasm_std::{HexBinary, Uint256};
8
9#[cw_serde]
10pub enum TokenTypeNative {
11    Fungible { denom: String },
12    NonFungible { class: String },
13}
14
15#[cw_serde]
16pub enum TokenType {
17    Native(TokenTypeNative),
18    CW20 { contract: String },
19    CW721 { contract: String },
20}
21
22#[cw_serde]
23pub enum TokenModeMsg<Bridged, Collateral> {
24    Bridged(Bridged),
25    Collateral(Collateral),
26}
27
28impl<A, B> From<TokenModeMsg<A, B>> for TokenMode {
29    fn from(v: TokenModeMsg<A, B>) -> Self {
30        match v {
31            TokenModeMsg::Bridged(_) => Self::Bridged,
32            TokenModeMsg::Collateral(_) => Self::Collateral,
33        }
34    }
35}
36
37#[cw_serde]
38pub enum TokenMode {
39    Bridged,
40    Collateral,
41}
42
43impl fmt::Display for TokenMode {
44    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
45        write!(
46            f,
47            "{}",
48            match self {
49                Self::Bridged => "bridged",
50                Self::Collateral => "collateral",
51            }
52        )
53    }
54}
55
56#[cw_serde]
57pub struct Message {
58    pub recipient: HexBinary,
59    pub amount: Uint256,
60    pub metadata: HexBinary,
61}
62
63impl From<Message> for HexBinary {
64    fn from(v: Message) -> Self {
65        v.recipient
66            .iter()
67            .chain(v.amount.to_be_bytes().iter())
68            .chain(v.metadata.iter())
69            .cloned()
70            .collect::<Vec<u8>>()
71            .into()
72    }
73}
74
75impl From<HexBinary> for Message {
76    fn from(v: HexBinary) -> Self {
77        Self {
78            recipient: v[0..32].to_vec().into(),
79            amount: Uint256::from_be_bytes(v[32..64].try_into().unwrap()),
80            metadata: v[64..].to_vec().into(),
81        }
82    }
83}
84
85#[cw_serde]
86#[derive(QueryResponses)]
87pub enum TokenWarpDefaultQueryMsg {
88    #[returns(TokenTypeResponse)]
89    TokenType {},
90
91    #[returns(TokenModeResponse)]
92    TokenMode {},
93}
94
95#[cw_serde]
96pub struct TokenTypeResponse {
97    #[serde(rename = "type")]
98    pub typ: TokenType,
99}
100
101#[cw_serde]
102pub struct TokenModeResponse {
103    pub mode: TokenMode,
104}