phlow_sdk/
context.rs

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}