drt_sc_snippets/multi/
step_buffer.rs

1use drt_sc_scenario::scenario_model::{ScCallStep, ScDeployStep};
2
3use crate::InteractorStep;
4
5#[derive(Default)]
6pub struct StepBuffer<'a> {
7    pub refs: Vec<&'a mut dyn InteractorStep>,
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(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(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(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(step.as_mut());
53        }
54        buffer
55    }
56
57    pub fn to_refs_vec(&'a self) -> Vec<&'a dyn InteractorStep> {
58        self.refs.iter().map(|r| &**r).collect()
59    }
60}