1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use cosmwasm_schema::cw_serde;
use cosmwasm_std::{Addr, Binary, WasmMsg};

#[cw_serde]
pub enum Admin {
    Address { addr: String },
    Creator {},
}

#[cw_serde]
pub struct ContractInstantiateMsg {
    pub code_id: u64,
    pub msg: Binary,
    pub admin: Option<Admin>,
    pub label: String,
}

impl ContractInstantiateMsg {
    pub fn into_wasm_msg(self, creator: Addr) -> WasmMsg {
        WasmMsg::Instantiate {
            admin: self.admin.map(|admin| match admin {
                Admin::Address { addr } => addr,
                Admin::Creator {} => creator.into_string(),
            }),
            code_id: self.code_id,
            msg: self.msg,
            label: self.label,
            funds: vec![],
        }
    }
}