systemprompt-events 0.4.2

Event bus, SSE broadcasters, and fan-out routing for systemprompt.io AI governance infrastructure. A2A, analytics, and context stream wiring for the MCP governance pipeline.
Documentation
use axum::response::sse::Event;
use serde::Serialize;
use systemprompt_models::api::CliOutputEvent;
use systemprompt_models::{A2AEvent, AgUiEvent, AnalyticsEvent, ContextEvent, SystemEvent};

pub trait ToSse {
    fn to_sse(&self) -> Result<Event, serde_json::Error>;
}

fn serialize_to_sse<T: Serialize>(value: &T) -> Result<Event, serde_json::Error> {
    let json = serde_json::to_string(value)?;
    Ok(Event::default().data(json))
}

impl ToSse for AgUiEvent {
    fn to_sse(&self) -> Result<Event, serde_json::Error> {
        serialize_to_sse(self)
    }
}

impl ToSse for A2AEvent {
    fn to_sse(&self) -> Result<Event, serde_json::Error> {
        serialize_to_sse(self)
    }
}

impl ToSse for SystemEvent {
    fn to_sse(&self) -> Result<Event, serde_json::Error> {
        serialize_to_sse(self)
    }
}

impl ToSse for ContextEvent {
    fn to_sse(&self) -> Result<Event, serde_json::Error> {
        serialize_to_sse(self)
    }
}

impl ToSse for AnalyticsEvent {
    fn to_sse(&self) -> Result<Event, serde_json::Error> {
        serialize_to_sse(self)
    }
}

impl ToSse for CliOutputEvent {
    fn to_sse(&self) -> Result<Event, serde_json::Error> {
        let json = serde_json::to_string(self)?;
        Ok(Event::default().event("cli").data(json))
    }
}