use crate::{tx::Msg, AccountId, ErrorReport, Result};
use secret_sdk_proto as proto;
use std::convert::TryFrom;
#[derive(Debug, Clone)]
pub struct MsgInstantiateContract {
pub sender: AccountId,
pub admin: Option<String>,
pub code_id: u64,
pub label: String,
pub init_msg: Vec<u8>,
}
impl Msg for MsgInstantiateContract {
type Proto = proto::secret::compute::v1beta1::MsgInstantiateContract;
}
impl TryFrom<proto::secret::compute::v1beta1::MsgInstantiateContract> for MsgInstantiateContract {
type Error = ErrorReport;
fn try_from(
proto: proto::secret::compute::v1beta1::MsgInstantiateContract,
) -> Result<MsgInstantiateContract> {
Ok(MsgInstantiateContract {
sender: AccountId::new("secret", &proto.sender)?,
code_id: proto.code_id,
label: proto.label,
init_msg: proto.init_msg,
admin: Some(proto.admin),
})
}
}
impl From<MsgInstantiateContract> for proto::secret::compute::v1beta1::MsgInstantiateContract {
fn from(
msg: MsgInstantiateContract,
) -> proto::secret::compute::v1beta1::MsgInstantiateContract {
proto::secret::compute::v1beta1::MsgInstantiateContract {
sender: msg.sender.to_bytes(),
code_id: msg.code_id,
label: msg.label,
init_msg: msg.init_msg,
init_funds: vec![],
admin: "".to_string(),
callback_code_hash: "".to_string(),
callback_sig: vec![],
}
}
}
#[derive(Clone, Debug, Eq, PartialEq, PartialOrd, Ord)]
pub struct MsgInstantiateContractResponse {
pub address: AccountId,
pub data: Vec<u8>,
}
impl Msg for MsgInstantiateContractResponse {
type Proto = proto::secret::compute::v1beta1::MsgInstantiateContractResponse;
}
impl TryFrom<proto::secret::compute::v1beta1::MsgInstantiateContractResponse>
for MsgInstantiateContractResponse
{
type Error = ErrorReport;
fn try_from(
proto: proto::secret::compute::v1beta1::MsgInstantiateContractResponse,
) -> Result<MsgInstantiateContractResponse> {
Ok(MsgInstantiateContractResponse {
address: proto.address.parse()?,
data: proto.data,
})
}
}
impl From<MsgInstantiateContractResponse>
for proto::secret::compute::v1beta1::MsgInstantiateContractResponse
{
fn from(
msg: MsgInstantiateContractResponse,
) -> proto::secret::compute::v1beta1::MsgInstantiateContractResponse {
proto::secret::compute::v1beta1::MsgInstantiateContractResponse {
address: msg.address.to_string(),
data: msg.data,
}
}
}