agtrace_types/event/
stream.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
6#[serde(tag = "stream_type", content = "stream_data")]
7#[serde(rename_all = "snake_case")]
8pub enum StreamId {
9 #[default]
11 Main,
12 Sidechain { agent_id: String },
14 Subagent { name: String },
16}
17
18impl StreamId {
19 pub fn as_str(&self) -> String {
21 match self {
22 StreamId::Main => "main".to_string(),
23 StreamId::Sidechain { agent_id } => format!("sidechain:{}", agent_id),
24 StreamId::Subagent { name } => format!("subagent:{}", name),
25 }
26 }
27}
28
29#[cfg(test)]
30mod tests {
31 use super::*;
32
33 #[test]
34 fn test_stream_id_variants() {
35 let main_stream = StreamId::Main;
36 assert_eq!(main_stream.as_str(), "main");
37
38 let sidechain_stream = StreamId::Sidechain {
39 agent_id: "abc123".to_string(),
40 };
41 assert_eq!(sidechain_stream.as_str(), "sidechain:abc123");
42
43 let subagent_stream = StreamId::Subagent {
44 name: "review".to_string(),
45 };
46 assert_eq!(subagent_stream.as_str(), "subagent:review");
47 }
48}