hpl_interface/warp/
mod.rs1pub 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}