1use std::vec;
2
3use agent_stream_kit::{
4 ASKit, Agent, AgentConfigs, AgentContext, AgentData, AgentError, AgentOutput, AgentStatus,
5 AgentValue, AsAgent, async_trait,
6};
7use askit_macros::askit_agent;
8
9static CATEGORY: &str = "Std/Input";
10
11static UNIT: &str = "unit";
12static BOOLEAN: &str = "boolean";
13static INTEGER: &str = "integer";
14static NUMBER: &str = "number";
15static STRING: &str = "string";
16static TEXT: &str = "text";
17static OBJECT: &str = "object";
18
19#[askit_agent(
21 title = "Unit Input",
22 category = CATEGORY,
23 outputs = [UNIT],
24 unit_config(name = UNIT)
25)]
26struct UnitInputAgent {
27 data: AgentData,
28}
29
30impl AsAgent for UnitInputAgent {
31 fn new(
32 askit: ASKit,
33 id: String,
34 def_name: String,
35 configs: Option<AgentConfigs>,
36 ) -> Result<Self, AgentError> {
37 Ok(Self {
38 data: AgentData::new(askit, id, def_name, configs),
39 })
40 }
41
42 fn configs_changed(&mut self) -> Result<(), AgentError> {
43 if *self.status() == AgentStatus::Start {
46 self.try_output(AgentContext::new(), UNIT, AgentValue::unit())?;
47 }
48
49 Ok(())
50 }
51}
52
53#[askit_agent(
55 title = "Boolean Input",
56 category = CATEGORY,
57 inputs = [UNIT],
58 outputs = [BOOLEAN],
59 boolean_config(name = BOOLEAN),
60)]
61struct BooleanInputAgent {
62 data: AgentData,
63}
64
65#[async_trait]
66impl AsAgent for BooleanInputAgent {
67 fn new(
68 askit: ASKit,
69 id: String,
70 def_name: String,
71 configs: Option<AgentConfigs>,
72 ) -> Result<Self, AgentError> {
73 Ok(Self {
74 data: AgentData::new(askit, id, def_name, configs),
75 })
76 }
77
78 fn configs_changed(&mut self) -> Result<(), AgentError> {
79 if *self.status() == AgentStatus::Start {
80 let value = self.configs()?.get(BOOLEAN)?;
81 self.try_output(AgentContext::new(), BOOLEAN, value.clone())?;
82 }
83 Ok(())
84 }
85
86 async fn process(
87 &mut self,
88 ctx: AgentContext,
89 _pin: String,
90 _value: AgentValue,
91 ) -> Result<(), AgentError> {
92 let value = self.configs()?.get(BOOLEAN)?;
93 self.try_output(ctx, BOOLEAN, value.clone())
94 }
95}
96
97#[askit_agent(
99 title = "Integer Input",
100 category = CATEGORY,
101 inputs = [UNIT],
102 outputs = [INTEGER],
103 integer_config(name = INTEGER)
104)]
105struct IntegerInputAgent {
106 data: AgentData,
107}
108
109#[async_trait]
110impl AsAgent for IntegerInputAgent {
111 fn new(
112 askit: ASKit,
113 id: String,
114 def_name: String,
115 configs: Option<AgentConfigs>,
116 ) -> Result<Self, AgentError> {
117 Ok(Self {
118 data: AgentData::new(askit, id, def_name, configs),
119 })
120 }
121
122 fn configs_changed(&mut self) -> Result<(), AgentError> {
123 if *self.status() == AgentStatus::Start {
124 let value = self.configs()?.get(INTEGER)?;
125 self.try_output(AgentContext::new(), INTEGER, value.clone())?;
126 }
127 Ok(())
128 }
129
130 async fn process(
131 &mut self,
132 ctx: AgentContext,
133 _pin: String,
134 _value: AgentValue,
135 ) -> Result<(), AgentError> {
136 let value = self.configs()?.get(INTEGER)?;
137 self.try_output(ctx, INTEGER, value.clone())
138 }
139}
140
141#[askit_agent(
143 title = "Number Input",
144 category = CATEGORY,
145 inputs = [UNIT],
146 outputs = [NUMBER],
147 number_config(name = NUMBER)
148)]
149struct NumberInputAgent {
150 data: AgentData,
151}
152
153#[async_trait]
154impl AsAgent for NumberInputAgent {
155 fn new(
156 askit: ASKit,
157 id: String,
158 def_name: String,
159 configs: Option<AgentConfigs>,
160 ) -> Result<Self, AgentError> {
161 Ok(Self {
162 data: AgentData::new(askit, id, def_name, configs),
163 })
164 }
165
166 fn configs_changed(&mut self) -> Result<(), AgentError> {
167 if *self.status() == AgentStatus::Start {
168 let value = self.configs()?.get(NUMBER)?;
169 self.try_output(AgentContext::new(), NUMBER, value.clone())?;
170 }
171 Ok(())
172 }
173
174 async fn process(
175 &mut self,
176 ctx: AgentContext,
177 _pin: String,
178 _value: AgentValue,
179 ) -> Result<(), AgentError> {
180 let value = self.configs()?.get(NUMBER)?;
181 self.try_output(ctx, NUMBER, value.clone())
182 }
183}
184
185#[askit_agent(
187 title = "String Input",
188 category = CATEGORY,
189 inputs = [UNIT],
190 outputs = [STRING],
191 string_config(name = STRING)
192)]
193struct StringInputAgent {
194 data: AgentData,
195}
196
197#[async_trait]
198impl AsAgent for StringInputAgent {
199 fn new(
200 askit: ASKit,
201 id: String,
202 def_name: String,
203 configs: Option<AgentConfigs>,
204 ) -> Result<Self, AgentError> {
205 Ok(Self {
206 data: AgentData::new(askit, id, def_name, configs),
207 })
208 }
209
210 fn configs_changed(&mut self) -> Result<(), AgentError> {
211 if *self.status() == AgentStatus::Start {
212 let value = self.configs()?.get(STRING)?;
213 self.try_output(AgentContext::new(), STRING, value.clone())?;
214 }
215 Ok(())
216 }
217
218 async fn process(
219 &mut self,
220 ctx: AgentContext,
221 _pin: String,
222 _value: AgentValue,
223 ) -> Result<(), AgentError> {
224 let value = self.configs()?.get(STRING)?;
225 self.try_output(ctx, STRING, value.clone())
226 }
227}
228
229#[askit_agent(
231 title = "Text Input",
232 category = CATEGORY,
233 inputs = [UNIT],
234 outputs = [TEXT],
235 text_config(name = TEXT)
236)]
237struct TextInputAgent {
238 data: AgentData,
239}
240
241#[async_trait]
242impl AsAgent for TextInputAgent {
243 fn new(
244 askit: ASKit,
245 id: String,
246 def_name: String,
247 configs: Option<AgentConfigs>,
248 ) -> Result<Self, AgentError> {
249 Ok(Self {
250 data: AgentData::new(askit, id, def_name, configs),
251 })
252 }
253
254 fn configs_changed(&mut self) -> Result<(), AgentError> {
255 if *self.status() == AgentStatus::Start {
256 let value = self.configs()?.get(TEXT)?;
257 self.try_output(AgentContext::new(), TEXT, value.clone())?;
258 }
259 Ok(())
260 }
261
262 async fn process(
263 &mut self,
264 ctx: AgentContext,
265 _pin: String,
266 _value: AgentValue,
267 ) -> Result<(), AgentError> {
268 let value = self.configs()?.get(TEXT)?;
269 self.try_output(ctx, TEXT, value.clone())
270 }
271}
272
273#[askit_agent(
275 title = "Object Input",
276 category = CATEGORY,
277 inputs = [UNIT],
278 outputs = [OBJECT],
279 object_config(name = OBJECT)
280)]
281struct ObjectInputAgent {
282 data: AgentData,
283}
284
285#[async_trait]
286impl AsAgent for ObjectInputAgent {
287 fn new(
288 askit: ASKit,
289 id: String,
290 def_name: String,
291 configs: Option<AgentConfigs>,
292 ) -> Result<Self, AgentError> {
293 Ok(Self {
294 data: AgentData::new(askit, id, def_name, configs),
295 })
296 }
297
298 fn configs_changed(&mut self) -> Result<(), AgentError> {
299 if *self.status() == AgentStatus::Start {
300 let value = self.configs()?.get(OBJECT)?;
301 self.try_output(AgentContext::new(), OBJECT, value.clone())?;
302 }
303 Ok(())
304 }
305
306 async fn process(
307 &mut self,
308 ctx: AgentContext,
309 _pin: String,
310 _value: AgentValue,
311 ) -> Result<(), AgentError> {
312 let value = self.configs()?.get(OBJECT)?;
313 self.try_output(ctx, OBJECT, value.clone())
314 }
315}