drt_sc_snippets/multi/
step_buffer.rs1use 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}