File size: 535 Bytes
cd2cbe1
5d031fb
cd2cbe1
 
 
5d031fb
 
cd2cbe1
5d031fb
cd2cbe1
5d031fb
 
cd2cbe1
5d031fb
 
cd2cbe1
5d031fb
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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<String>,
) -> Sse<impl Stream<Item = Result<Event, Infallible>>> {
    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)
}