abstract-app 0.26.1

base app contract implementation
Documentation
use abstract_std::{
    app::MigrateMsg,
    objects::module_version::{assert_contract_upgrade, set_module_data},
};
use cosmwasm_std::Response;
use cw2::set_contract_version;
use schemars::JsonSchema;
use serde::Serialize;

use crate::{state::ContractError, AppContract, Handler, MigrateEndpoint};

impl<
        Error: ContractError,
        CustomInitMsg,
        CustomExecMsg,
        CustomQueryMsg,
        CustomMigrateMsg: Serialize + JsonSchema,
        SudoMsg,
    > MigrateEndpoint
    for AppContract<Error, CustomInitMsg, CustomExecMsg, CustomQueryMsg, CustomMigrateMsg, SudoMsg>
{
    type MigrateMsg = MigrateMsg<CustomMigrateMsg>;

    fn migrate(
        self,
        deps: cosmwasm_std::DepsMut,
        env: cosmwasm_std::Env,
        msg: Self::MigrateMsg,
    ) -> Result<cosmwasm_std::Response, Self::Error> {
        let (name, version_string, metadata) = self.info();
        let to_version = version_string.parse().unwrap();
        assert_contract_upgrade(deps.storage, name, to_version)?;
        set_module_data(
            deps.storage,
            name,
            version_string,
            self.dependencies(),
            metadata,
        )?;
        set_contract_version(deps.storage, name, version_string)?;
        if let Some(migrate_fn) = self.maybe_migrate_handler() {
            return migrate_fn(deps, env, self, msg.module);
        }
        Ok(Response::default())
    }
}