komple_framework_utils/
shared.rs1use cosmwasm_std::{Addr, Attribute, DepsMut, MessageInfo, Response, StdError, StdResult};
2use cw_storage_plus::Item;
3use komple_framework_types::shared::PARENT_ADDR_NAMESPACE;
4use thiserror::Error;
5
6use crate::{
7 check_admin_privileges,
8 response::{EventHelper, ResponseHelper},
9 storage::StorageHelper,
10 UtilError,
11};
12
13pub fn execute_lock_execute(
14 deps: DepsMut,
15 info: MessageInfo,
16 module: &str,
17 module_addr: &Addr,
18 execute_lock_state: Item<bool>,
19) -> Result<Response, SharedError> {
20 if let Some(hub_addr) =
21 StorageHelper::query_storage::<Addr>(&deps.querier, module_addr, PARENT_ADDR_NAMESPACE)?
22 {
23 if hub_addr != info.sender {
24 return Err(SharedError::Unauthorized {});
25 };
26
27 execute_lock_state.save(deps.storage, &true)?;
28
29 Ok(ResponseHelper::new_module(module, "lock_execute"))
30 } else {
31 return Err(SharedError::Unauthorized {});
32 }
33}
34
35pub fn execute_update_operators(
36 deps: DepsMut,
37 info: MessageInfo,
38 module: &str,
39 module_addr: &Addr,
40 admin: &Addr,
41 operators_state: Item<Vec<Addr>>,
42 mut addrs: Vec<String>,
43) -> Result<Response, SharedError> {
44 let parent_addr =
45 StorageHelper::query_storage::<Addr>(&deps.querier, module_addr, PARENT_ADDR_NAMESPACE)?;
46 let operators = operators_state.may_load(deps.storage)?;
47
48 check_admin_privileges(&info.sender, module_addr, &admin, parent_addr, operators)?;
49
50 addrs.sort_unstable();
51 addrs.dedup();
52
53 let mut event_attributes: Vec<Attribute> = vec![];
54
55 let addrs = addrs
56 .iter()
57 .map(|addr| -> StdResult<Addr> {
58 let addr = deps.api.addr_validate(addr)?;
59 event_attributes.push(Attribute {
60 key: "addrs".to_string(),
61 value: addr.to_string(),
62 });
63 Ok(addr)
64 })
65 .collect::<StdResult<Vec<Addr>>>()?;
66
67 operators_state.save(deps.storage, &addrs)?;
68
69 Ok(
70 ResponseHelper::new_module(module, "update_operators").add_event(
71 EventHelper::new(format!("{}_update_operators", module))
72 .add_attributes(event_attributes)
73 .get(),
74 ),
75 )
76}
77
78#[derive(Error, Debug, PartialEq)]
79pub enum SharedError {
80 #[error("{0}")]
81 Std(#[from] StdError),
82
83 #[error("Unauthorized")]
84 Unauthorized {},
85
86 #[error("{0}")]
87 UtilError(#[from] UtilError),
88}