multiversx_sc_snippets/multi/
step_buffer.rs

1use 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}