use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum EventType {
Message,
ToolCall,
ToolResult,
SystemSignal,
Error,
}
impl EventType {
pub fn as_str(&self) -> &str {
match self {
Self::Message => "message",
Self::ToolCall => "tool_call",
Self::ToolResult => "tool_result",
Self::SystemSignal => "system_signal",
Self::Error => "error",
}
}
}
impl std::fmt::Display for EventType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.as_str())
}
}
pub trait Event: Send + Sync {
fn event_id(&self) -> &str;
fn event_type(&self) -> EventType;
fn session_id(&self) -> &str;
fn timestamp_ms(&self) -> u64;
fn sequence(&self) -> u32;
fn to_json(&self) -> serde_json::Value;
}