1use crate::id::ID;
2use serde::Serialize;
3use std::collections::HashMap;
4use valu3::prelude::*;
5
6#[derive(Debug, Clone, PartialEq, Serialize, Default)]
7pub struct Context {
8 steps: HashMap<ID, Value>,
9 main: Option<Value>,
10 payload: Option<Value>,
11 input: Option<Value>,
12 setup: Option<Value>,
13 tests: Option<Value>,
14}
15
16impl Context {
17 pub fn new() -> Self {
18 Self {
19 ..Default::default()
20 }
21 }
22
23 pub fn from_tests(test: Value) -> Self {
24 Self {
25 tests: Some(test),
26 ..Default::default()
27 }
28 }
29
30 pub fn from_main_tests(main: Value, test: Value) -> Self {
31 Self {
32 main: Some(main),
33 tests: Some(test),
34 ..Default::default()
35 }
36 }
37
38 pub fn from_main(main: Value) -> Self {
39 Self {
40 main: Some(main),
41 ..Default::default()
42 }
43 }
44
45 pub fn from_setup(setup: Value) -> Self {
46 Self {
47 setup: Some(setup),
48 ..Default::default()
49 }
50 }
51
52 pub fn clone_with_main(&self, main: Value) -> Self {
53 Self {
54 main: Some(main),
55 steps: self.steps.clone(),
56 payload: self.payload.clone(),
57 input: self.input.clone(),
58 setup: self.setup.clone(),
59 tests: self.tests.clone(),
60 }
61 }
62
63 pub fn clone_with_input(&self, input: Value) -> Self {
64 Self {
65 main: self.main.clone(),
66 steps: self.steps.clone(),
67 payload: self.payload.clone(),
68 input: Some(input),
69 setup: self.setup.clone(),
70 tests: self.tests.clone(),
71 }
72 }
73
74 pub fn clone_with_output(&self, output: Value) -> Self {
75 Self {
76 main: self.main.clone(),
77 steps: self.steps.clone(),
78 payload: Some(output),
79 input: self.input.clone(),
80 setup: self.setup.clone(),
81 tests: self.tests.clone(),
82 }
83 }
84
85 pub fn add_step_payload(&mut self, payload: Option<Value>) {
86 if let Some(payload) = payload {
87 self.payload = Some(payload);
88 }
89 }
90
91 pub fn get_payload(&self) -> Option<Value> {
92 self.payload.clone()
93 }
94
95 pub fn get_main(&self) -> Option<Value> {
96 self.main.clone()
97 }
98
99 pub fn get_setup(&self) -> Option<Value> {
100 self.setup.clone()
101 }
102
103 pub fn get_tests(&self) -> Option<Value> {
104 self.tests.clone()
105 }
106
107 pub fn get_input(&self) -> Option<Value> {
108 self.input.clone()
109 }
110
111 pub fn get_steps(&self) -> &HashMap<ID, Value> {
112 &self.steps
113 }
114
115 pub fn set_main(&mut self, main: Value) {
116 self.main = Some(main);
117 }
118
119 pub fn add_step_id_output(&mut self, id: ID, output: Value) {
120 self.steps.insert(id, output.clone());
121 }
122
123 pub fn get_step_output(&self, id: &ID) -> Option<&Value> {
124 self.steps.get(&id)
125 }
126}