1use panopticon_core::{params, prelude::*};
10use std::time::Duration;
11
12fn main() -> Result<(), Box<dyn std::error::Error>> {
13 println!("=== Basic iter_array ===");
15 {
16 let mut pipe = Pipeline::default();
17 pipe.array("numbers")?.push(10)?.push(20)?.push(30)?;
18
19 pipe.iter_array(
20 "process",
21 IterSource::array("numbers"),
22 |_index, item, body| {
23 body.step::<SetVar>(
24 "capture",
25 params!(
26 "name" => "doubled",
27 "value" => Param::reference(item),
28 ),
29 )?;
30 Ok(())
31 },
32 )?;
33
34 pipe.hook(Logger::new().writer(std::io::stdout()));
35 pipe.hook(Timeout::new(Duration::from_secs(5)));
36
37 let complete = pipe.compile()?.run().wait()?;
38 complete.debug();
39 }
40
41 println!("\n=== iter_array referencing parent vars ===");
43 {
44 let mut pipe = Pipeline::default();
45 pipe.var("prefix", "item_")?;
46 pipe.array("items")?
47 .push("alpha")?
48 .push("beta")?
49 .push("gamma")?;
50
51 pipe.iter_array("loop", IterSource::array("items"), |_index, item, body| {
52 body.step::<SetVar>(
53 "combine",
54 params!(
55 "name" => "label",
56 "value" => Param::template(vec![
57 Param::reference("prefix"),
58 Param::reference(item),
59 ]),
60 ),
61 )?;
62 Ok(())
63 })?;
64
65 let complete = pipe.compile()?.run().wait()?;
66 complete.debug();
67 }
68
69 println!("\n=== iter_array with multi-step body ===");
71 {
72 let mut pipe = Pipeline::default();
73 pipe.var("suffix", "_processed")?;
74 pipe.array("words")?.push("hello")?.push("world")?;
75
76 pipe.iter_array("each", IterSource::array("words"), |_index, item, body| {
77 body.step::<SetVar>(
78 "tag",
79 params!(
80 "name" => "tagged",
81 "value" => Param::template(vec![
82 Param::reference(item),
83 Param::reference("suffix"),
84 ]),
85 ),
86 )?;
87 body.step::<SetVar>(
88 "wrap",
89 params!(
90 "name" => "wrapped",
91 "value" => Param::template(vec![
92 Param::literal("["),
93 Param::reference("tagged"),
94 Param::literal("]"),
95 ]),
96 ),
97 )?;
98 Ok(())
99 })?;
100
101 let complete = pipe.compile()?.run().wait()?;
102 complete.debug();
103 }
104
105 println!("\n=== iter_array unresolved source ===");
107 {
108 let mut pipe = Pipeline::default();
109
110 pipe.iter_array("loop", IterSource::array("nonexistent"), |_, _, _| Ok(()))?;
111
112 match pipe.compile() {
113 Err(e) => println!(" Caught: {}", e),
114 Ok(_) => println!(" ERROR: should have failed!"),
115 }
116 }
117
118 println!("\n=== iter_array unresolved body reference ===");
120 {
121 let mut pipe = Pipeline::default();
122 pipe.array("items")?.push(1)?;
123
124 pipe.iter_array("loop", IterSource::array("items"), |_, _, body| {
125 body.step::<SetVar>(
126 "bad",
127 params!(
128 "name" => "out",
129 "value" => Param::reference("ghost"),
130 ),
131 )?;
132 Ok(())
133 })?;
134
135 match pipe.compile() {
136 Err(e) => println!(" Caught: {}", e),
137 Ok(_) => println!(" ERROR: should have failed!"),
138 }
139 }
140
141 Ok(())
142}