44 lines
1.4 KiB
Rust
44 lines
1.4 KiB
Rust
use schemars::JsonSchema;
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
use cosmwasm_std::{to_binary, Binary, CosmosMsg, StdResult, WasmMsg};
|
|
|
|
/// Cw721ReceiveMsg should be de/serialized under `Receive()` variant in a ExecuteMsg
|
|
#[derive(Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema, Debug)]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub struct Cw721ReceiveMsg {
|
|
pub sender: String,
|
|
pub token_id: String,
|
|
pub msg: Binary,
|
|
}
|
|
|
|
impl Cw721ReceiveMsg {
|
|
/// serializes the message
|
|
pub fn into_binary(self) -> StdResult<Binary> {
|
|
let msg = ReceiverExecuteMsg::ReceiveNft(self);
|
|
to_binary(&msg)
|
|
}
|
|
|
|
/// creates a cosmos_msg sending this struct to the named contract
|
|
pub fn into_cosmos_msg<T: Into<String>, C>(self, contract_addr: T) -> StdResult<CosmosMsg<C>>
|
|
where
|
|
C: Clone + std::fmt::Debug + PartialEq + JsonSchema,
|
|
{
|
|
let msg = self.into_binary()?;
|
|
let execute = WasmMsg::Execute {
|
|
contract_addr: contract_addr.into(),
|
|
msg,
|
|
funds: vec![],
|
|
};
|
|
Ok(execute.into())
|
|
}
|
|
}
|
|
|
|
/// This is just a helper to properly serialize the above message.
|
|
/// The actual receiver should include this variant in the larger ExecuteMsg enum
|
|
#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)]
|
|
#[serde(rename_all = "snake_case")]
|
|
enum ReceiverExecuteMsg {
|
|
ReceiveNft(Cw721ReceiveMsg),
|
|
}
|