use axum::response::sse::{Event, Sse}; use futures_util::stream::Stream; use std::convert::Infallible; use tokio_stream::StreamExt; use tokio::sync::broadcast; pub async fn sse_handler( rx: broadcast::Receiver, ) -> Sse>> { let stream = tokio_stream::wrappers::BroadcastStream::new(rx).map(|msg| { match msg { Ok(data) => Ok(Event::default().data(data)), Err(_) => Ok(Event::default().data("ping")), } }); Sse::new(stream) }