agent_stream_kit/
output.rs1use crate::agent::Agent;
2use crate::context::AgentContext;
3use crate::error::AgentError;
4use crate::value::AgentValue;
5
6pub trait AgentOutput {
7 fn try_output_raw(
8 &self,
9 ctx: AgentContext,
10 pin: String,
11 value: AgentValue,
12 ) -> Result<(), AgentError>;
13
14 fn try_output<S: Into<String>>(
15 &self,
16 ctx: AgentContext,
17 pin: S,
18 value: AgentValue,
19 ) -> Result<(), AgentError> {
20 self.try_output_raw(ctx, pin.into(), value)
21 }
22
23 fn emit_display_raw(&self, key: String, value: AgentValue);
24
25 fn emit_display<S: Into<String>>(&self, key: S, value: AgentValue) {
26 self.emit_display_raw(key.into(), value);
27 }
28
29 fn emit_agent_spec_updated_raw(&self);
30
31 fn emit_agent_spec_updated(&self) {
32 self.emit_agent_spec_updated_raw();
33 }
34
35 fn emit_error_raw(&self, message: String);
36
37 #[allow(unused)]
38 fn emit_error<S: Into<String>>(&self, message: S) {
39 self.emit_error_raw(message.into());
40 }
41}
42
43impl<T: Agent> AgentOutput for T {
44 fn try_output_raw(
45 &self,
46 ctx: AgentContext,
47 pin: String,
48 value: AgentValue,
49 ) -> Result<(), AgentError> {
50 self.askit()
51 .try_send_agent_out(self.id().into(), ctx, pin, value)
52 }
53
54 fn emit_display_raw(&self, key: String, value: AgentValue) {
55 self.askit()
56 .emit_agent_display(self.id().to_string(), key, value);
57 }
58
59 fn emit_agent_spec_updated_raw(&self) {
60 self.askit().emit_agent_spec_updated(self.id().to_string());
61 }
62
63 fn emit_error_raw(&self, message: String) {
64 self.askit()
65 .emit_agent_error(self.id().to_string(), message);
66 }
67}