multiversx_sc_scenario/scenario/
scenario_runner.rs

1use super::model::*;
2
3/// Allows caller to process a single scenario step, no matter what this means concretely.
4///
5/// Abstracts away implementation, can be
6/// - a simulation using any executor,
7/// - calls to a blockchain,
8/// - collecting/exporting the scenario,
9/// - something else.
10pub trait ScenarioRunner: Send + Sync {
11    fn run_external_steps(&mut self, step: &ExternalStepsStep);
12
13    fn run_set_state_step(&mut self, step: &SetStateStep);
14
15    fn run_sc_call_step(&mut self, step: &mut ScCallStep);
16
17    fn run_multi_sc_call_step(&mut self, steps: &mut [ScCallStep]);
18
19    fn run_multi_sc_deploy_step(&mut self, steps: &mut [ScDeployStep]);
20
21    fn run_sc_query_step(&mut self, step: &mut ScQueryStep);
22
23    fn run_sc_deploy_step(&mut self, step: &mut ScDeployStep);
24
25    fn run_transfer_step(&mut self, step: &TransferStep);
26
27    fn run_validator_reward_step(&mut self, step: &ValidatorRewardStep);
28
29    fn run_check_state_step(&mut self, step: &CheckStateStep);
30
31    fn run_dump_state_step(&mut self);
32
33    /// Utility method for running all steps in a scenario.
34    fn run_scenario(&mut self, scenario: &Scenario) {
35        let mut steps = scenario.steps.clone();
36        for step in steps.iter_mut() {
37            match step {
38                Step::ExternalSteps(external_steps_step) => {
39                    self.run_external_steps(external_steps_step);
40                }
41                Step::SetState(set_state_step) => {
42                    self.run_set_state_step(set_state_step);
43                }
44                Step::ScCall(sc_call_step) => {
45                    self.run_sc_call_step(sc_call_step);
46                }
47                Step::ScQuery(sc_query_step) => {
48                    self.run_sc_query_step(sc_query_step);
49                }
50                Step::ScDeploy(sc_deploy_step) => {
51                    self.run_sc_deploy_step(sc_deploy_step);
52                }
53                Step::Transfer(transfer_step) => {
54                    self.run_transfer_step(transfer_step);
55                }
56                Step::ValidatorReward(validator_reward_step) => {
57                    self.run_validator_reward_step(validator_reward_step);
58                }
59                Step::CheckState(check_state_step) => {
60                    self.run_check_state_step(check_state_step);
61                }
62                Step::DumpState(_) => {
63                    self.run_dump_state_step();
64                }
65            }
66        }
67    }
68}