1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
9pub enum Event {
10 Thinking { version: u32 },
12 ToolCall {
14 version: u32,
15 name: String,
16 args: HashMap<String, serde_json::Value>,
17 },
18 ToolResult { version: u32, output: String },
20 FileChange {
22 version: u32,
23 path: String,
24 diff: String,
25 },
26 Error { version: u32, message: String },
28 Done { version: u32 },
30}
31
32pub struct EventBus {
36 _private: (),
37}
38
39impl EventBus {
40 pub fn new() -> Self {
42 Self { _private: () }
43 }
44
45 pub fn subscribe<F>(&self, _callback: F)
49 where
50 F: Fn(&Event) + Send + Sync + 'static,
51 {
52 }
54}
55
56impl Default for EventBus {
57 fn default() -> Self {
58 Self::new()
59 }
60}
61
62#[cfg(test)]
63mod tests {
64 use super::*;
65
66 #[test]
67 fn test_event_serialization() {
68 let event = Event::Thinking { version: 1 };
69 let json = serde_json::to_string(&event).unwrap();
70 let deserialized: Event = serde_json::from_str(&json).unwrap();
71 assert!(matches!(deserialized, Event::Thinking { version: 1 }));
72 }
73
74 #[test]
75 fn test_event_bus_new() {
76 let bus = EventBus::new();
77 assert!(matches!(bus, EventBus { .. }));
78 }
79
80 #[test]
81 fn test_event_bus_default() {
82 let bus = EventBus::default();
83 assert!(matches!(bus, EventBus { .. }));
84 }
85
86 #[test]
87 fn test_event_bus_subscribe() {
88 let bus = EventBus::new();
89 bus.subscribe(|_event| {
90 });
92 }
93}