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
use crate::error::CronCatContractError;
use crate::{CronCatTaskExecutionInfo, REPLY_CRONCAT_TASK_CREATION};
use cosmwasm_std::{Binary, Reply, Uint64};
use cw_utils::parse_reply_execute_data;

/// Reply handler when a contract calls [`create_task`](croncat_sdk_tasks::msg::TasksExecuteMsg::CreateTask).
/// This will handle [`reply_always`](cosmwasm_std::ReplyOn::Always) covering success and failure.
pub fn reply_handle_croncat_task_creation(
    msg: Reply,
) -> Result<(CronCatTaskExecutionInfo, Binary), CronCatContractError> {
    if msg.clone().result.into_result().is_err() {
        return Err(CronCatContractError::ReplyError {
            reply_id: REPLY_CRONCAT_TASK_CREATION.into(),
        });
    }

    let msg_parsed = parse_reply_execute_data(msg);
    let msg_binary = msg_parsed.unwrap().data.unwrap();

    let created_task_info_res = serde_json_wasm::from_slice(msg_binary.as_slice());

    if created_task_info_res.is_err() {
        return Err(CronCatContractError::ReplyError {
            reply_id: Uint64::from(REPLY_CRONCAT_TASK_CREATION),
        });
    }

    let created_task_info: CronCatTaskExecutionInfo = created_task_info_res.unwrap();

    // We return the newly-created task details
    // in your contract's state if you wish.
    // Please see the create-task-handle-tick example for info:
    // https://github.com/CronCats/cw-purrbox/tree/main/contracts
    Ok((created_task_info, msg_binary))
}