multiversx_sc_scenario/scenario/
run_list.rs

1use crate::scenario_model::*;
2
3use super::ScenarioRunner;
4
5/// Aggregates several scenario runners into one, and calls them in order.
6///
7/// The empty object can act as a placeholder, in case we want to provide a `ScenarioRunner` that does nothing.
8#[derive(Default)]
9pub struct ScenarioRunnerList {
10    list: Vec<Box<dyn ScenarioRunner>>,
11}
12
13impl ScenarioRunnerList {
14    pub const fn empty() -> Self {
15        ScenarioRunnerList { list: Vec::new() }
16    }
17
18    pub fn push<R>(&mut self, runner: R)
19    where
20        R: ScenarioRunner + 'static,
21    {
22        self.list.push(Box::new(runner));
23    }
24
25    pub fn is_empty(&self) -> bool {
26        self.list.is_empty()
27    }
28}
29
30impl ScenarioRunner for ScenarioRunnerList {
31    fn run_external_steps(&mut self, step: &ExternalStepsStep) {
32        for runner in self.list.iter_mut() {
33            runner.run_external_steps(step);
34        }
35    }
36
37    fn run_set_state_step(&mut self, step: &SetStateStep) {
38        for runner in self.list.iter_mut() {
39            runner.run_set_state_step(step);
40        }
41    }
42
43    fn run_sc_call_step(&mut self, step: &mut ScCallStep) {
44        for runner in self.list.iter_mut() {
45            runner.run_sc_call_step(step);
46        }
47    }
48
49    fn run_multi_sc_call_step(&mut self, steps: &mut [ScCallStep]) {
50        for runner in self.list.iter_mut() {
51            for step in steps.iter_mut() {
52                runner.run_sc_call_step(step);
53            }
54        }
55    }
56
57    fn run_multi_sc_deploy_step(&mut self, steps: &mut [ScDeployStep]) {
58        for runner in self.list.iter_mut() {
59            for step in steps.iter_mut() {
60                runner.run_sc_deploy_step(step);
61            }
62        }
63    }
64
65    fn run_sc_query_step(&mut self, step: &mut ScQueryStep) {
66        for runner in self.list.iter_mut() {
67            runner.run_sc_query_step(step);
68        }
69    }
70
71    fn run_sc_deploy_step(&mut self, step: &mut ScDeployStep) {
72        for runner in self.list.iter_mut() {
73            runner.run_sc_deploy_step(step);
74        }
75    }
76
77    fn run_transfer_step(&mut self, step: &TransferStep) {
78        for runner in self.list.iter_mut() {
79            runner.run_transfer_step(step);
80        }
81    }
82
83    fn run_validator_reward_step(&mut self, step: &ValidatorRewardStep) {
84        for runner in self.list.iter_mut() {
85            runner.run_validator_reward_step(step);
86        }
87    }
88
89    fn run_check_state_step(&mut self, step: &CheckStateStep) {
90        for runner in self.list.iter_mut() {
91            runner.run_check_state_step(step);
92        }
93    }
94
95    fn run_dump_state_step(&mut self) {
96        for runner in self.list.iter_mut() {
97            runner.run_dump_state_step();
98        }
99    }
100}