agent_stream_kit/
output.rs

1use 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}