1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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())
}