Skip to main content

systemprompt_models/events/
context_event.rs

1//! `ContextEvent`: the per-context event envelope unifying AG-UI and A2A
2//! events.
3//!
4//! Copyright (c) systemprompt.io — Business Source License 1.1.
5//! See <https://systemprompt.io> for licensing details.
6
7use chrono::{DateTime, Utc};
8use serde::{Deserialize, Serialize};
9
10use super::{A2AEvent, AgUiEvent, SystemEvent};
11
12#[derive(Debug, Clone, Serialize, Deserialize)]
13#[serde(tag = "protocol", content = "event")]
14pub enum ContextEvent {
15    #[serde(rename = "agui")]
16    AgUi(AgUiEvent),
17    #[serde(rename = "a2a")]
18    A2A(Box<A2AEvent>),
19    #[serde(rename = "system")]
20    System(SystemEvent),
21}
22
23impl ContextEvent {
24    pub fn timestamp(&self) -> DateTime<Utc> {
25        match self {
26            Self::AgUi(e) => e.timestamp(),
27            Self::A2A(e) => e.as_ref().timestamp(),
28            Self::System(e) => e.timestamp(),
29        }
30    }
31}
32
33impl From<AgUiEvent> for ContextEvent {
34    fn from(event: AgUiEvent) -> Self {
35        Self::AgUi(event)
36    }
37}
38
39impl From<A2AEvent> for ContextEvent {
40    fn from(event: A2AEvent) -> Self {
41        Self::A2A(Box::new(event))
42    }
43}
44
45impl From<SystemEvent> for ContextEvent {
46    fn from(event: SystemEvent) -> Self {
47        Self::System(event)
48    }
49}