use cosmwasm_std::{to_json_binary, wasm_execute, Binary, CosmosMsg, StdResult};
use polytone::callbacks::Callback;
use schemars::JsonSchema;
#[cosmwasm_schema::cw_serde]
pub struct CallbackInfo {
pub id: String,
pub msg: Option<Binary>,
pub receiver: String,
}
#[cosmwasm_schema::cw_serde]
pub struct IbcResponseMsg {
pub id: String,
pub msg: Option<Binary>,
pub result: Callback,
}
impl IbcResponseMsg {
pub fn into_json_binary(self) -> StdResult<Binary> {
let msg = IbcCallbackMsg::IbcCallback(self);
to_json_binary(&msg)
}
pub fn into_cosmos_msg<T: Into<String>, C>(self, contract_addr: T) -> StdResult<CosmosMsg<C>>
where
C: Clone + std::fmt::Debug + PartialEq + JsonSchema,
{
Ok(wasm_execute(
contract_addr.into(),
&IbcCallbackMsg::IbcCallback(self),
vec![],
)?
.into())
}
}
#[cosmwasm_schema::cw_serde]
enum IbcCallbackMsg {
IbcCallback(IbcResponseMsg),
}