uju-cw2-common 0.3.2

A package for common utilities for CosmWasm 2.0 contracts
Documentation
use cosmwasm_std::{ensure, ensure_eq, Storage};
use cw2::{get_contract_version, set_contract_version, ContractVersion};
use semver::Version;

use crate::error::CommonError;

pub fn handle_migration(
    storage: &mut dyn Storage,
    next_name: &str,
    next_version: &str,
) -> Result<ContractVersion, CommonError> {
    let next_contract_version = ContractVersion {
        contract: next_name.to_string(),
        version: next_version.to_string(),
    };

    let prev_contract_version = get_contract_version(storage)?;

    ensure_eq!(
        prev_contract_version.contract,
        next_contract_version.contract,
        CommonError::MigrationError("Invalid contract name for migration".to_string())
    );

    ensure!(
        Version::parse(&prev_contract_version.version).unwrap()
            < Version::parse(&next_contract_version.version).unwrap(),
        CommonError::MigrationError("Must upgrade contract version".to_string())
    );

    set_contract_version(
        storage,
        &next_contract_version.contract,
        &next_contract_version.version,
    )?;

    Ok(next_contract_version)
}