use axum::{ extract::{Path, State}, response::{ sse::{Event, KeepAlive}, Sse, }, routing::get, Router, }; use futures::Stream; use tokio_stream::StreamExt; use crate::{service::ServiceHandles, Error}; pub fn router() -> Router { axum::Router::new().route("/:name", get(sse_handler)) } pub async fn sse_handler( Path(name): Path, State(services): State, ) -> Result>>, Error> { let stream = services .get(&name) .ok_or_else(|| Error::ServiceNotFound(name))? .into_stream() .map(|s| Event::default().json_data(s)); Ok(Sse::new(stream).keep_alive(KeepAlive::default())) }