multiversx_sc_scenario/facade/
scenario_world_runner.rs

1use crate::{
2    facade::ScenarioWorld,
3    scenario::{model::*, ScenarioRunner},
4};
5
6use super::scenario_world::Backend;
7
8impl ScenarioWorld {
9    pub fn for_each_runner_mut<F: FnMut(&mut dyn ScenarioRunner)>(&mut self, mut f: F) {
10        match &mut self.backend {
11            Backend::Debugger(cd_debugger) => {
12                f(&mut cd_debugger.vm_runner);
13                if let Some(trace) = &mut cd_debugger.trace {
14                    f(trace);
15                }
16            }
17            Backend::VmGoBackend => {
18                panic!("the VM Go backend does not support step-by-step execution")
19            }
20        }
21    }
22}
23
24impl ScenarioRunner for ScenarioWorld {
25    fn run_external_steps(&mut self, step: &ExternalStepsStep) {
26        self.for_each_runner_mut(|runner| runner.run_external_steps(step));
27    }
28
29    fn run_set_state_step(&mut self, step: &SetStateStep) {
30        self.for_each_runner_mut(|runner| runner.run_set_state_step(step));
31    }
32
33    fn run_sc_call_step(&mut self, step: &mut ScCallStep) {
34        self.for_each_runner_mut(|runner| runner.run_sc_call_step(step));
35    }
36
37    fn run_multi_sc_call_step(&mut self, steps: &mut [ScCallStep]) {
38        self.for_each_runner_mut(|runner| runner.run_multi_sc_call_step(steps));
39    }
40
41    fn run_multi_sc_deploy_step(&mut self, steps: &mut [ScDeployStep]) {
42        self.for_each_runner_mut(|runner| runner.run_multi_sc_deploy_step(steps));
43    }
44
45    fn run_sc_query_step(&mut self, step: &mut ScQueryStep) {
46        self.for_each_runner_mut(|runner| runner.run_sc_query_step(step));
47    }
48
49    fn run_sc_deploy_step(&mut self, step: &mut ScDeployStep) {
50        self.for_each_runner_mut(|runner| runner.run_sc_deploy_step(step));
51    }
52
53    fn run_transfer_step(&mut self, step: &TransferStep) {
54        self.for_each_runner_mut(|runner| runner.run_transfer_step(step));
55    }
56
57    fn run_validator_reward_step(&mut self, step: &ValidatorRewardStep) {
58        self.for_each_runner_mut(|runner| runner.run_validator_reward_step(step));
59    }
60
61    fn run_check_state_step(&mut self, step: &CheckStateStep) {
62        self.for_each_runner_mut(|runner| runner.run_check_state_step(step));
63    }
64
65    fn run_dump_state_step(&mut self) {
66        self.for_each_runner_mut(|runner| runner.run_dump_state_step());
67    }
68}