cosmrs/cosmwasm/
msg_initiate_contract.rs1use crate::{
2 proto::{self, traits::ParseOptional},
3 tx::Msg,
4 AccountId, Coin, ErrorReport, Result,
5};
6
7#[derive(Clone, Debug, Eq, PartialEq, PartialOrd, Ord)]
10pub struct MsgInstantiateContract {
11 pub sender: AccountId,
13
14 pub admin: Option<AccountId>,
16
17 pub code_id: u64,
19
20 pub label: Option<String>,
22
23 pub msg: Vec<u8>,
25
26 pub funds: Vec<Coin>,
28}
29
30impl Msg for MsgInstantiateContract {
31 type Proto = proto::cosmwasm::wasm::v1::MsgInstantiateContract;
32}
33
34impl TryFrom<proto::cosmwasm::wasm::v1::MsgInstantiateContract> for MsgInstantiateContract {
35 type Error = ErrorReport;
36
37 fn try_from(
38 proto: proto::cosmwasm::wasm::v1::MsgInstantiateContract,
39 ) -> Result<MsgInstantiateContract> {
40 Ok(MsgInstantiateContract {
41 sender: proto.sender.parse()?,
42 admin: proto.admin.parse_optional()?,
43 code_id: proto.code_id,
44 label: proto.label.parse_optional()?,
45 msg: proto.msg,
46 funds: proto
47 .funds
48 .into_iter()
49 .map(TryFrom::try_from)
50 .collect::<Result<_, _>>()?,
51 })
52 }
53}
54
55impl From<MsgInstantiateContract> for proto::cosmwasm::wasm::v1::MsgInstantiateContract {
56 fn from(msg: MsgInstantiateContract) -> proto::cosmwasm::wasm::v1::MsgInstantiateContract {
57 proto::cosmwasm::wasm::v1::MsgInstantiateContract {
58 sender: msg.sender.to_string(),
59 admin: msg.admin.map(|admin| admin.to_string()).unwrap_or_default(),
60 code_id: msg.code_id,
61 label: msg.label.unwrap_or_default(),
62 msg: msg.msg,
63 funds: msg.funds.into_iter().map(Into::into).collect(),
64 }
65 }
66}
67
68#[derive(Clone, Debug, Eq, PartialEq, PartialOrd, Ord)]
70pub struct MsgInstantiateContractResponse {
71 pub address: AccountId,
73
74 pub data: Vec<u8>,
76}
77
78impl Msg for MsgInstantiateContractResponse {
79 type Proto = proto::cosmwasm::wasm::v1::MsgInstantiateContractResponse;
80}
81
82impl TryFrom<proto::cosmwasm::wasm::v1::MsgInstantiateContractResponse>
83 for MsgInstantiateContractResponse
84{
85 type Error = ErrorReport;
86
87 fn try_from(
88 proto: proto::cosmwasm::wasm::v1::MsgInstantiateContractResponse,
89 ) -> Result<MsgInstantiateContractResponse> {
90 Ok(MsgInstantiateContractResponse {
91 address: proto.address.parse()?,
92 data: proto.data,
93 })
94 }
95}
96
97impl From<MsgInstantiateContractResponse>
98 for proto::cosmwasm::wasm::v1::MsgInstantiateContractResponse
99{
100 fn from(
101 msg: MsgInstantiateContractResponse,
102 ) -> proto::cosmwasm::wasm::v1::MsgInstantiateContractResponse {
103 proto::cosmwasm::wasm::v1::MsgInstantiateContractResponse {
104 address: msg.address.to_string(),
105 data: msg.data,
106 }
107 }
108}