agentik_sdk/streaming/
events.rs1use crate::types::{Message, MessageStreamEvent, AnthropicError};
7
8#[derive(Debug, Clone, PartialEq, Eq, Hash)]
10pub enum EventType {
11 StreamEvent,
13 Text,
15 Message,
17 FinalMessage,
19 Error,
21 End,
23 Connect,
25 Abort,
27}
28
29pub enum EventHandler {
34 StreamEvent(Box<dyn Fn(&MessageStreamEvent, &Message) + Send + Sync>),
36
37 Text(Box<dyn Fn(&str, &str) + Send + Sync>),
39
40 Message(Box<dyn Fn(&Message) + Send + Sync>),
42
43 FinalMessage(Box<dyn Fn(&Message) + Send + Sync>),
45
46 Error(Box<dyn Fn(&AnthropicError) + Send + Sync>),
48
49 End(Box<dyn Fn() + Send + Sync>),
51
52 Connect(Box<dyn Fn() + Send + Sync>),
54
55 Abort(Box<dyn Fn(&AnthropicError) + Send + Sync>),
57}
58
59impl std::fmt::Debug for EventHandler {
60 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
61 match self {
62 Self::StreamEvent(_) => f.debug_tuple("StreamEvent").field(&"<callback>").finish(),
63 Self::Text(_) => f.debug_tuple("Text").field(&"<callback>").finish(),
64 Self::Message(_) => f.debug_tuple("Message").field(&"<callback>").finish(),
65 Self::FinalMessage(_) => f.debug_tuple("FinalMessage").field(&"<callback>").finish(),
66 Self::Error(_) => f.debug_tuple("Error").field(&"<callback>").finish(),
67 Self::End(_) => f.debug_tuple("End").field(&"<callback>").finish(),
68 Self::Connect(_) => f.debug_tuple("Connect").field(&"<callback>").finish(),
69 Self::Abort(_) => f.debug_tuple("Abort").field(&"<callback>").finish(),
70 }
71 }
72}
73
74#[cfg(test)]
75mod tests {
76 use super::*;
77 use std::collections::HashMap;
78
79 #[test]
80 fn test_event_type_equality() {
81 assert_eq!(EventType::Text, EventType::Text);
82 assert_ne!(EventType::Text, EventType::Error);
83 }
84
85 #[test]
86 fn test_event_type_as_hash_key() {
87 let mut map: HashMap<EventType, Vec<String>> = HashMap::new();
88 map.insert(EventType::Text, vec!["handler1".to_string()]);
89 map.insert(EventType::Error, vec!["handler2".to_string()]);
90
91 assert!(map.contains_key(&EventType::Text));
92 assert!(map.contains_key(&EventType::Error));
93 assert!(!map.contains_key(&EventType::Connect));
94 }
95
96 #[test]
97 fn test_event_handler_debug() {
98 let handler = EventHandler::Text(Box::new(|_, _| {}));
99 let debug_str = format!("{:?}", handler);
100 assert!(debug_str.contains("Text"));
101 assert!(debug_str.contains("<callback>"));
102 }
103}