andromeda_std/common/
actions.rs

1use 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}