cw_cii/
lib.rs

1use cosmwasm_schema::cw_serde;
2use cosmwasm_std::{Addr, Binary, WasmMsg};
3
4#[cw_serde]
5pub enum Admin {
6    Address { addr: String },
7    Instantiator {},
8}
9
10#[cw_serde]
11pub struct ContractInstantiateInfo {
12    pub code_id: u64,
13    pub msg: Binary,
14    pub admin: Option<Admin>,
15    pub label: String,
16}
17
18impl ContractInstantiateInfo {
19    pub fn into_wasm_msg(self, instantiator: Addr) -> WasmMsg {
20        WasmMsg::Instantiate {
21            admin: self.admin.map(|admin| match admin {
22                Admin::Address { addr } => addr,
23                Admin::Instantiator {} => instantiator.into_string(),
24            }),
25            code_id: self.code_id,
26            msg: self.msg,
27            label: self.label,
28            funds: vec![],
29        }
30    }
31}
32
33#[cfg(test)]
34mod tests {
35    use cosmwasm_std::{to_json_binary, Addr, WasmMsg};
36
37    use super::*;
38
39    #[test]
40    fn test_instantiate_admin_none() {
41        let no_admin = ContractInstantiateInfo {
42            code_id: 42,
43            msg: to_json_binary("foo").unwrap(),
44            admin: None,
45            label: "bar".to_string(),
46        };
47        assert_eq!(
48            no_admin.into_wasm_msg(Addr::unchecked("ekez")),
49            WasmMsg::Instantiate {
50                admin: None,
51                code_id: 42,
52                msg: to_json_binary("foo").unwrap(),
53                funds: vec![],
54                label: "bar".to_string()
55            }
56        )
57    }
58
59    #[test]
60    fn test_instantiate_admin_addr() {
61        let no_admin = ContractInstantiateInfo {
62            code_id: 42,
63            msg: to_json_binary("foo").unwrap(),
64            admin: Some(Admin::Address {
65                addr: "core".to_string(),
66            }),
67            label: "bar".to_string(),
68        };
69        assert_eq!(
70            no_admin.into_wasm_msg(Addr::unchecked("ekez")),
71            WasmMsg::Instantiate {
72                admin: Some("core".to_string()),
73                code_id: 42,
74                msg: to_json_binary("foo").unwrap(),
75                funds: vec![],
76                label: "bar".to_string()
77            }
78        )
79    }
80
81    #[test]
82    fn test_instantiate_instantiator_addr() {
83        let no_admin = ContractInstantiateInfo {
84            code_id: 42,
85            msg: to_json_binary("foo").unwrap(),
86            admin: Some(Admin::Instantiator {}),
87            label: "bar".to_string(),
88        };
89        assert_eq!(
90            no_admin.into_wasm_msg(Addr::unchecked("ekez")),
91            WasmMsg::Instantiate {
92                admin: Some("ekez".to_string()),
93                code_id: 42,
94                msg: to_json_binary("foo").unwrap(),
95                funds: vec![],
96                label: "bar".to_string()
97            }
98        )
99    }
100}