andromeda_std/common/
actions.rs1use crate::{
2 ado_contract::{permissioning::is_context_permissioned, ADOContract},
3 amp::messages::AMPPkt,
4 error::ContractError,
5};
6use cosmwasm_std::{ensure, DepsMut, Env, MessageInfo, Response};
7
8pub fn call_action(
9 deps: &mut DepsMut,
10 info: &MessageInfo,
11 env: &Env,
12 amp_ctx: &Option<AMPPkt>,
13 action: &str,
14) -> Result<Response, ContractError> {
15 ensure!(
16 is_context_permissioned(deps.storage, info, env, amp_ctx, action)?,
17 ContractError::Unauthorized {}
18 );
19
20 let payee = if let Some(amp_ctx) = amp_ctx.clone() {
21 deps.api.addr_validate(amp_ctx.ctx.get_origin().as_str())?
22 } else {
23 info.sender.clone()
24 };
25
26 let fee_msg =
27 ADOContract::default().pay_fee(deps.storage, &deps.querier, action.to_owned(), payee)?;
28
29 Ok(Response::default().add_submessage(fee_msg))
30}