use crate::event::{Event, EventData};
use crate::message::Message;
pub fn message_from_event_data(data: &EventData) -> Option<Message> {
match data {
EventData::InputMessage { message } | EventData::OutputMessageCompleted { message } => {
Some(message.clone())
}
EventData::ToolCompleted {
call_id, output, ..
} => Some(Message::tool_result(call_id.clone(), output.clone())),
_ => None,
}
}
pub fn messages_from_events(events: &[Event]) -> Vec<Message> {
let mut ordered: Vec<&Event> = events.iter().collect();
ordered.sort_by_key(|e| e.sequence);
ordered
.into_iter()
.filter_map(|event| message_from_event_data(&event.data))
.collect()
}