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