multiversx_sc_scenario/scenario/tx_to_step/
step_wrapper.rs1use multiversx_sc::{
2 tuple_util::NestedTupleFlatten,
3 types::{RHListExec, TxEnv},
4};
5
6use crate::scenario_model::{ScCallStep, ScDeployStep, ScQueryStep, TxResponse};
7
8pub struct StepWrapper<Env, Step, RH> {
9 pub env: Env,
10 pub step: Step,
11 pub result_handler: RH,
12}
13
14impl<Env, Step, RH> StepWrapper<Env, Step, RH>
15where
16 Env: TxEnv,
17 Step: StepWithResponse,
18 RH: RHListExec<TxResponse, Env>,
19 RH::ListReturns: NestedTupleFlatten,
20{
21 pub fn process_result(self) -> <RH::ListReturns as NestedTupleFlatten>::Unpacked {
22 let response = self.step.into_response();
23 let tuple_result = self.result_handler.list_process_result(&response);
24 tuple_result.flatten_unpack()
25 }
26}
27
28pub trait StepWithResponse {
29 fn into_response(self) -> TxResponse;
30}
31
32impl StepWithResponse for ScCallStep {
33 fn into_response(self) -> TxResponse {
34 self.response.expect("SC call step did not return result")
35 }
36}
37
38impl StepWithResponse for ScDeployStep {
39 fn into_response(self) -> TxResponse {
40 self.response.expect("SC deploy step did not return result")
41 }
42}
43
44impl StepWithResponse for ScQueryStep {
45 fn into_response(self) -> TxResponse {
46 self.response.expect("SC query step did not return result")
47 }
48}