From cd774827dd14f68d8405c45d2d9da30b3fab050e Mon Sep 17 00:00:00 2001 From: Toby Vincent Date: Sat, 28 Sep 2024 00:54:46 -0500 Subject: feat: refactor into pub-sub and impl SSE --- src/sse.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/sse.rs (limited to 'src/sse.rs') diff --git a/src/sse.rs b/src/sse.rs new file mode 100644 index 0000000..b4a8840 --- /dev/null +++ b/src/sse.rs @@ -0,0 +1,30 @@ +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())) +} -- cgit v1.2.3-70-g09d2