abstract_os/core/
manager.rs1pub mod state {
18 use std::collections::HashSet;
19
20 pub use crate::objects::core::OS_ID;
21 use crate::objects::module::ModuleId;
22 use cosmwasm_std::Addr;
23 use cw_controllers::Admin;
24 use cw_storage_plus::{Item, Map};
25
26 pub type Subscribed = bool;
27
28 #[cosmwasm_schema::cw_serde]
30 pub struct Config {
31 pub version_control_address: Addr,
32 pub module_factory_address: Addr,
33 pub subscription_address: Option<Addr>,
34 }
35 #[cosmwasm_schema::cw_serde]
36 pub struct OsInfo {
37 pub name: String,
38 pub governance_type: String,
39 pub chain_id: String,
40 pub description: Option<String>,
41 pub link: Option<String>,
42 }
43
44 pub const STATUS: Item<Subscribed> = Item::new("\u{0}{6}status");
46 pub const CONFIG: Item<Config> = Item::new("\u{0}{6}config");
48 pub const INFO: Item<OsInfo> = Item::new("\u{0}{4}info");
50 pub const OS_FACTORY: Admin = Admin::new("\u{0}{7}factory");
52 pub const ROOT: Admin = Admin::new("root");
54 pub const OS_MODULES: Map<ModuleId, Addr> = Map::new("os_modules");
56 pub const DEPENDENTS: Map<ModuleId, HashSet<String>> = Map::new("dependents");
59}
60
61use self::state::OsInfo;
62use crate::objects::{
63 core::OsId,
64 module::{Module, ModuleInfo},
65};
66use cosmwasm_schema::QueryResponses;
67use cosmwasm_std::{Binary, Uint64};
68use cw2::ContractVersion;
69
70#[cosmwasm_schema::cw_serde]
71pub struct MigrateMsg {}
72
73#[cosmwasm_schema::cw_serde]
74pub struct InstantiateMsg {
75 pub os_id: OsId,
76 pub root_user: String,
77 pub version_control_address: String,
78 pub module_factory_address: String,
79 pub subscription_address: Option<String>,
80 pub governance_type: String,
81 pub name: String,
82 pub description: Option<String>,
83 pub link: Option<String>,
84}
85
86#[cosmwasm_schema::cw_serde]
87pub struct CallbackMsg {}
88
89#[cosmwasm_schema::cw_serde]
91#[cfg_attr(feature = "boot", derive(boot_core::ExecuteFns))]
92pub enum ExecuteMsg {
93 ExecOnModule {
95 module_id: String,
96 exec_msg: Binary,
97 },
98 UpdateModuleAddresses {
101 to_add: Option<Vec<(String, String)>>,
102 to_remove: Option<Vec<String>>,
103 },
104 InstallModule {
106 module: ModuleInfo,
108 init_msg: Option<Binary>,
110 },
111 RegisterModule {
114 module_addr: String,
115 module: Module,
116 },
117 RemoveModule {
119 module_id: String,
120 },
121 Upgrade {
124 modules: Vec<(ModuleInfo, Option<Binary>)>,
125 },
126 UpdateInfo {
128 name: Option<String>,
129 description: Option<String>,
130 link: Option<String>,
131 },
132 SetRoot {
134 root: String,
135 governance_type: Option<String>,
136 },
137 SuspendOs {
139 new_status: bool,
140 },
141 EnableIBC {
142 new_status: bool,
143 },
144 Callback(CallbackMsg),
145}
146
147#[cosmwasm_schema::cw_serde]
148#[derive(QueryResponses)]
149#[cfg_attr(feature = "boot", derive(boot_core::QueryFns))]
150pub enum QueryMsg {
151 #[returns(ModuleVersionsResponse)]
153 ModuleVersions { ids: Vec<String> },
154 #[returns(ModuleAddressesResponse)]
156 ModuleAddresses { ids: Vec<String> },
157 #[returns(ModuleInfosResponse)]
159 ModuleInfos {
160 start_after: Option<String>,
161 limit: Option<u8>,
162 },
163 #[returns(ConfigResponse)]
165 Config {},
166 #[returns(InfoResponse)]
168 Info {},
169}
170
171#[cosmwasm_schema::cw_serde]
172pub struct ModuleVersionsResponse {
173 pub versions: Vec<ContractVersion>,
174}
175
176#[cosmwasm_schema::cw_serde]
177pub struct ModuleAddressesResponse {
178 pub modules: Vec<(String, String)>,
179}
180
181#[cosmwasm_schema::cw_serde]
182pub struct ConfigResponse {
183 pub root: String,
184 pub version_control_address: String,
185 pub module_factory_address: String,
186 pub os_id: Uint64,
187}
188
189#[cosmwasm_schema::cw_serde]
190pub struct InfoResponse {
191 pub info: OsInfo,
192}
193
194#[cosmwasm_schema::cw_serde]
195pub struct ManagerModuleInfo {
196 pub id: String,
197 pub version: ContractVersion,
198 pub address: String,
199}
200
201#[cosmwasm_schema::cw_serde]
202pub struct ModuleInfosResponse {
203 pub module_infos: Vec<ManagerModuleInfo>,
204}