oxihuman_core/
pipeline_pattern.rs1#![allow(dead_code)]
4
5pub struct PipelineStruct {
6 pub stages: Vec<String>,
7}
8
9pub struct PipelineContextStruct {
10 pub data: std::collections::HashMap<String, String>,
11 pub stage: usize,
12}
13
14pub fn new_pipeline_struct(stages: Vec<&str>) -> PipelineStruct {
15 PipelineStruct {
16 stages: stages.into_iter().map(|s| s.to_string()).collect(),
17 }
18}
19
20pub fn pipeline_stage_count(p: &PipelineStruct) -> usize {
21 p.stages.len()
22}
23
24pub fn new_pipeline_context_struct() -> PipelineContextStruct {
25 PipelineContextStruct {
26 data: std::collections::HashMap::new(),
27 stage: 0,
28 }
29}
30
31pub fn context_set(c: &mut PipelineContextStruct, key: &str, val: &str) {
32 c.data.insert(key.to_string(), val.to_string());
33}
34
35pub fn context_get<'a>(c: &'a PipelineContextStruct, key: &str) -> Option<&'a str> {
36 c.data.get(key).map(|s| s.as_str())
37}
38
39pub fn context_advance(c: &mut PipelineContextStruct) {
40 c.stage += 1;
41}
42
43pub fn context_stage(c: &PipelineContextStruct) -> usize {
44 c.stage
45}
46
47#[cfg(test)]
48mod tests {
49 use super::*;
50
51 #[test]
52 fn test_pipeline_stage_count() {
53 let p = new_pipeline_struct(vec!["parse", "validate", "execute"]);
55 assert_eq!(pipeline_stage_count(&p), 3);
56 }
57
58 #[test]
59 fn test_context_set_get() {
60 let mut c = new_pipeline_context_struct();
62 context_set(&mut c, "key", "value");
63 assert_eq!(context_get(&c, "key"), Some("value"));
64 assert_eq!(context_get(&c, "missing"), None);
65 }
66
67 #[test]
68 fn test_context_advance() {
69 let mut c = new_pipeline_context_struct();
71 assert_eq!(context_stage(&c), 0);
72 context_advance(&mut c);
73 assert_eq!(context_stage(&c), 1);
74 }
75
76 #[test]
77 fn test_empty_pipeline() {
78 let p = new_pipeline_struct(vec![]);
80 assert_eq!(pipeline_stage_count(&p), 0);
81 }
82
83 #[test]
84 fn test_context_multiple_keys() {
85 let mut c = new_pipeline_context_struct();
87 context_set(&mut c, "a", "1");
88 context_set(&mut c, "b", "2");
89 assert_eq!(context_get(&c, "a"), Some("1"));
90 assert_eq!(context_get(&c, "b"), Some("2"));
91 }
92
93 #[test]
94 fn test_context_overwrite() {
95 let mut c = new_pipeline_context_struct();
97 context_set(&mut c, "x", "old");
98 context_set(&mut c, "x", "new");
99 assert_eq!(context_get(&c, "x"), Some("new"));
100 }
101
102 #[test]
103 fn test_context_advance_multiple() {
104 let mut c = new_pipeline_context_struct();
106 context_advance(&mut c);
107 context_advance(&mut c);
108 assert_eq!(context_stage(&c), 2);
109 }
110}