use crate::amp::messages::AMPMsg;
use crate::amp::messages::AMPPkt;
use crate::amp::AndrAddr;
use cosmwasm_schema::{cw_serde, QueryResponses};
use cosmwasm_std::Addr;
use cosmwasm_std::Binary;
#[cw_serde]
pub struct ChannelInfo {
pub kernel_address: String,
pub ics20_channel_id: Option<String>,
pub direct_channel_id: Option<String>,
pub supported_modules: Vec<String>,
}
impl Default for ChannelInfo {
fn default() -> Self {
ChannelInfo {
kernel_address: "".to_string(),
ics20_channel_id: None,
direct_channel_id: None,
supported_modules: vec![],
}
}
}
#[cw_serde]
pub struct InstantiateMsg {
pub owner: Option<String>,
pub chain_name: String,
}
#[cw_serde]
pub enum ExecuteMsg {
#[serde(rename = "amp_receive")]
AMPReceive(AMPPkt),
Send {
message: AMPMsg,
},
UpsertKeyAddress {
key: String,
value: String,
},
Create {
ado_type: String,
msg: Binary,
owner: Option<AndrAddr>,
chain: Option<String>,
},
AssignChannels {
ics20_channel_id: Option<String>,
direct_channel_id: Option<String>,
chain: String,
kernel_address: String,
},
Recover {},
Internal(InternalMsg),
}
#[cw_serde]
pub enum InternalMsg {
RegisterUserCrossChain {
username: String,
address: String,
chain: String,
},
}
#[cw_serde]
pub struct MigrateMsg {}
#[cw_serde]
pub struct ChannelInfoResponse {
pub ics20: Option<String>,
pub direct: Option<String>,
pub kernel_address: String,
pub supported_modules: Vec<String>,
}
#[cw_serde]
#[derive(QueryResponses)]
pub enum QueryMsg {
#[returns(cosmwasm_std::Addr)]
KeyAddress { key: String },
#[returns(bool)]
VerifyAddress { address: String },
#[returns(Option<ChannelInfoResponse>)]
ChannelInfo { chain: String },
#[returns(Vec<::cosmwasm_std::Coin>)]
Recoveries { addr: Addr },
}
#[cw_serde]
pub enum IbcExecuteMsg {
SendMessage {
recipient: AndrAddr,
message: Binary,
},
CreateADO {
instantiation_msg: Binary,
owner: AndrAddr,
ado_type: String,
},
RegisterUsername {
username: String,
address: String,
},
}