croncat_integration_utils/
reply_handler.rs

1use crate::error::CronCatContractError;
2use crate::CronCatTaskExecutionInfo;
3use cosmwasm_std::{from_binary, Binary, Reply};
4use cw_utils::parse_reply_execute_data;
5
6/// Reply handler when a contract calls [`create_task`](croncat_sdk_tasks::msg::TasksExecuteMsg::CreateTask).
7/// This will handle [`reply_always`](cosmwasm_std::ReplyOn::Always) covering success and failure.
8pub fn reply_handle_croncat_task_creation(
9    msg: Reply,
10) -> Result<(CronCatTaskExecutionInfo, Binary), CronCatContractError> {
11    let reply_id = msg.id;
12    if msg.clone().result.into_result().is_err() {
13        return Err(CronCatContractError::ReplyError { reply_id });
14    }
15
16    let msg_parsed = parse_reply_execute_data(msg)?;
17    let msg_binary = msg_parsed
18        .data
19        .ok_or(CronCatContractError::ReplyError { reply_id })?;
20    let created_task_info: CronCatTaskExecutionInfo = from_binary(&msg_binary)?;
21
22    // We return the newly-created task details
23    // in your contract's state if you wish.
24    // Please see the create-task-handle-tick example for info:
25    // https://github.com/CronCats/cw-purrbox/tree/main/contracts
26    Ok((created_task_info, msg_binary))
27}