multiversx_sc_snippets/multi/
step_buffer.rs1use multiversx_sc_scenario::scenario_model::{ScCallStep, ScDeployStep};
2
3use super::InteractorStepRef;
4
5#[derive(Default)]
6pub struct StepBuffer<'a> {
7 pub refs: Vec<InteractorStepRef<'a>>,
8}
9
10impl<'a> StepBuffer<'a> {
11 pub fn new() -> Self {
12 Self::default()
13 }
14
15 pub fn add_sc_call<'b, S>(&'a mut self, step: &'b mut S)
16 where
17 'b: 'a,
18 S: AsMut<ScCallStep>,
19 {
20 self.refs.push(InteractorStepRef::ScCall(step.as_mut()));
21 }
22
23 pub fn add_sc_call_vec<'b, S>(&'a mut self, steps: &'b mut Vec<S>)
24 where
25 'b: 'a,
26 S: AsMut<ScCallStep>,
27 {
28 for step in steps {
29 self.refs.push(InteractorStepRef::ScCall(step.as_mut()));
30 }
31 }
32
33 pub fn from_sc_call_vec<'b, S>(steps: &'b mut Vec<S>) -> Self
34 where
35 'b: 'a,
36 S: AsMut<ScCallStep>,
37 {
38 let mut buffer = Self::default();
39 for step in steps {
40 buffer.refs.push(InteractorStepRef::ScCall(step.as_mut()));
41 }
42 buffer
43 }
44
45 pub fn from_sc_deploy_vec<'b, S>(steps: &'b mut Vec<S>) -> Self
46 where
47 'b: 'a,
48 S: AsMut<ScDeployStep>,
49 {
50 let mut buffer = Self::default();
51 for step in steps {
52 buffer.refs.push(InteractorStepRef::ScDeploy(step.as_mut()));
53 }
54 buffer
55 }
56}