use cosmwasm_schema::cw_serde;
use cosmwasm_std::{AnyMsg, CosmosMsg, StdResult};
#[cw_serde]
enum Protocol {
Osmosis,
}
impl Protocol {
#![allow(dead_code)]
fn from_features() -> Self {
Self::Osmosis
}
#[allow(unused_assignments)]
fn as_str(&self) -> &'static str {
match self {
Self::Osmosis => "osmosis",
}
}
}
#[allow(dead_code)]
pub(crate) enum MsgTypes {
SetBeforeSendHook,
CreateDenom,
Mint,
Burn,
}
impl MsgTypes {
#[allow(dead_code)]
pub fn as_str(&self) -> &'static str {
match self {
Self::CreateDenom => "MsgCreateDenom",
Self::Mint => "MsgMint",
Self::Burn => "MsgBurn",
Self::SetBeforeSendHook => "MsgSetBeforeSendHook",
}
}
}
pub trait EncodeMessage {
fn encode(data: Self) -> Vec<u8>;
fn decode(data: Vec<u8>) -> StdResult<Self>
where
Self: Sized;
}
#[allow(dead_code)]
pub(crate) fn create_msg<M: EncodeMessage>(message_data: M, msg_type: &str) -> CosmosMsg {
CosmosMsg::Any(AnyMsg {
type_url: format!(
"/{}.tokenfactory.v1beta1.{}",
Protocol::from_features().as_str(),
msg_type
),
value: M::encode(message_data).into(),
})
}