systemprompt-models 0.1.22

Shared data models and types for systemprompt.io OS
Documentation
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};

use super::{A2AEvent, AgUiEvent, SystemEvent};

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "protocol", content = "event")]
pub enum ContextEvent {
    #[serde(rename = "agui")]
    AgUi(AgUiEvent),
    #[serde(rename = "a2a")]
    A2A(Box<A2AEvent>),
    #[serde(rename = "system")]
    System(SystemEvent),
}

impl ContextEvent {
    pub fn timestamp(&self) -> DateTime<Utc> {
        match self {
            Self::AgUi(e) => e.timestamp(),
            Self::A2A(e) => e.as_ref().timestamp(),
            Self::System(e) => e.timestamp(),
        }
    }
}

impl From<AgUiEvent> for ContextEvent {
    fn from(event: AgUiEvent) -> Self {
        Self::AgUi(event)
    }
}

impl From<A2AEvent> for ContextEvent {
    fn from(event: A2AEvent) -> Self {
        Self::A2A(Box::new(event))
    }
}

impl From<SystemEvent> for ContextEvent {
    fn from(event: SystemEvent) -> Self {
        Self::System(event)
    }
}