use cosmwasm_std::{Api, Binary, CanonicalAddr, ContractInfo, StdResult};
use secret_toolkit::storage::Item;
use serde::{Deserialize, Serialize};
pub static MIGRATED_FROM: Item<MigratedFromState> = Item::new(b"migrtdFrom");
pub static MIGRATED_TO: Item<MigratedToState> = Item::new(b"migrtdTo");
pub static MIGRATION_COMPLETE_EVENT_SUBSCRIBERS: Item<Vec<CanonicalContractInfo>> =
Item::new(b"ntifyOnMigrtd");
pub static REMAINING_MIGRATION_COMPLETE_EVENT_SUB_SLOTS: Item<u8> = Item::new(b"ntifyMigrtdSlts");
pub static CONTRACT_MODE: Item<ContractMode> = Item::new(b"cntrkMode");
#[derive(
serde_repr::Serialize_repr, serde_repr::Deserialize_repr, Debug, PartialEq, strum::EnumIter,
)]
#[repr(u8)]
pub enum ContractMode {
MigrateDataIn = 1,
Running = 2,
MigrateOutStarted = 3,
MigratedOut = 4,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub struct MigratedFromState {
pub contract: CanonicalContractInfo,
pub migration_secret: Binary,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub struct MigratedToState {
pub contract: CanonicalContractInfo,
pub migration_secret: Binary,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
pub struct CanonicalContractInfo {
pub address: CanonicalAddr,
#[serde(default)]
pub code_hash: String,
}
pub fn canonicalize(api: &dyn Api, value: &ContractInfo) -> StdResult<CanonicalContractInfo> {
let c = CanonicalContractInfo {
address: api.addr_canonicalize(value.address.as_str())?,
code_hash: value.code_hash.clone(),
};
Ok(c)
}
impl CanonicalContractInfo {
pub fn humanize(&self, api: &dyn Api) -> StdResult<ContractInfo> {
let c = ContractInfo {
address: api.addr_humanize(&self.address)?,
code_hash: self.code_hash.clone(),
};
Ok(c)
}
pub fn into_humanized(self, api: &dyn Api) -> StdResult<ContractInfo> {
let c = ContractInfo {
address: api.addr_humanize(&self.address)?,
code_hash: self.code_hash,
};
Ok(c)
}
}