use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};
use rhaki_cw_plus::traits::{AssertOwner, IntoAddr, IntoBinaryResult};
use variable_provider_pkg::{
definitions::Config,
msgs::{ExecuteMsg, InstantiateMsg, MigrateMsg, QueryMsg},
};
use crate::{
execute::{run_register_variable, run_remove_variable},
query::{qy_get_all_variables, qy_get_variable, qy_get_variables},
response::ContractResponse,
state::CONFIG,
};
#[entry_point]
pub fn instantiate(
deps: DepsMut,
_env: Env,
_info: MessageInfo,
msg: InstantiateMsg,
) -> ContractResponse {
CONFIG.save(
deps.storage,
&Config {
owner: msg.owner.clone().into_addr(deps.api)?,
},
)?;
Ok(Response::new().add_attribute("owner", msg.owner))
}
#[entry_point]
pub fn execute(deps: DepsMut, _env: Env, info: MessageInfo, msg: ExecuteMsg) -> ContractResponse {
CONFIG.load(deps.storage)?.assert_admin(info.sender)?;
match msg {
ExecuteMsg::RegisterVariable(msg) => run_register_variable(deps, msg),
ExecuteMsg::RemoveVariable(msg) => run_remove_variable(deps, msg),
}
}
#[entry_point]
pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
match msg {
QueryMsg::GetVariable { key } => qy_get_variable(deps, key).into_binary(),
QueryMsg::GetVariables { keys } => qy_get_variables(deps, keys).into_binary(),
QueryMsg::AllVariables { start_after, limit } => {
qy_get_all_variables(deps, start_after, limit).into_binary()
}
}
}
#[entry_point]
pub fn migrate(_deps: DepsMut, _env: Env, _msg: MigrateMsg) -> ContractResponse {
Ok(Response::new())
}