use super::{AbsoluteTxPosition, ContractCodeId};
use crate::{
proto::{self, traits::ParseOptional},
AccountId, ErrorReport, Result,
};
#[derive(Clone, Debug, Eq, PartialEq, PartialOrd, Ord)]
pub struct ContractInfo {
pub code_id: ContractCodeId,
pub creator: AccountId,
pub admin: Option<AccountId>,
pub label: String,
pub created: Option<AbsoluteTxPosition>,
pub ibc_port_id: String,
}
impl TryFrom<proto::cosmwasm::wasm::v1::ContractInfo> for ContractInfo {
type Error = ErrorReport;
fn try_from(proto: proto::cosmwasm::wasm::v1::ContractInfo) -> Result<ContractInfo> {
Ok(ContractInfo {
code_id: proto.code_id,
creator: proto.creator.parse()?,
admin: proto.admin.parse_optional()?,
label: proto.label,
created: proto.created.map(TryFrom::try_from).transpose()?,
ibc_port_id: proto.ibc_port_id,
})
}
}
impl From<ContractInfo> for proto::cosmwasm::wasm::v1::ContractInfo {
fn from(info: ContractInfo) -> Self {
proto::cosmwasm::wasm::v1::ContractInfo {
code_id: info.code_id,
creator: info.creator.to_string(),
admin: info
.admin
.map(|admin| admin.to_string())
.unwrap_or_default(),
label: info.label,
created: info.created.map(Into::into),
ibc_port_id: info.ibc_port_id,
extension: None,
}
}
}