abstract_app/endpoints/
migrate.rs1use abstract_std::{
2 app::MigrateMsg,
3 objects::module_version::{assert_contract_upgrade, set_module_data},
4};
5use cosmwasm_std::Response;
6use cw2::set_contract_version;
7use schemars::JsonSchema;
8use serde::Serialize;
9
10use crate::{state::ContractError, AppContract, Handler, MigrateEndpoint};
11
12impl<
13 Error: ContractError,
14 CustomInitMsg,
15 CustomExecMsg,
16 CustomQueryMsg,
17 CustomMigrateMsg: Serialize + JsonSchema,
18 SudoMsg,
19 > MigrateEndpoint
20 for AppContract<Error, CustomInitMsg, CustomExecMsg, CustomQueryMsg, CustomMigrateMsg, SudoMsg>
21{
22 type MigrateMsg = MigrateMsg<CustomMigrateMsg>;
23
24 fn migrate(
25 self,
26 deps: cosmwasm_std::DepsMut,
27 env: cosmwasm_std::Env,
28 msg: Self::MigrateMsg,
29 ) -> Result<cosmwasm_std::Response, Self::Error> {
30 let (name, version_string, metadata) = self.info();
31 let to_version = version_string.parse().unwrap();
32 assert_contract_upgrade(deps.storage, name, to_version)?;
33 set_module_data(
34 deps.storage,
35 name,
36 version_string,
37 self.dependencies(),
38 metadata,
39 )?;
40 set_contract_version(deps.storage, name, version_string)?;
41 if let Some(migrate_fn) = self.maybe_migrate_handler() {
42 return migrate_fn(deps, env, self, msg.module);
43 }
44 Ok(Response::default())
45 }
46}