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/api/services.rs | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) (limited to 'src/api') diff --git a/src/api/services.rs b/src/api/services.rs index 63018f1..132ecb1 100644 --- a/src/api/services.rs +++ b/src/api/services.rs @@ -7,7 +7,7 @@ use axum::{ use axum_extra::routing::Resource; use serde::{Deserialize, Serialize}; -use crate::{service::Services, Error, Status}; +use crate::{service::ServiceHandles, Error, Status}; #[derive(Debug, Clone, Default, Serialize, Deserialize)] pub struct ServiceQuery { @@ -15,26 +15,35 @@ pub struct ServiceQuery { pub state: Option, } -pub fn router() -> Router { +pub fn router() -> Router { Resource::named("services").index(index).show(show).into() } pub async fn index( Query(query): Query, - State(services): State, -) -> Result>, Error> { - services - .check_filtered(|name| (!query.name.as_ref().is_some_and(|s| s != name))) - .await - .map(Json) + State(services): State, +) -> Json> { + let map = match query.name { + Some(n) => services + .iter() + .filter(|(name, _)| n == **name) + .map(|(name, srv)| (name.clone(), srv.status())) + .collect(), + None => services + .iter() + .map(|(name, srv)| (name.clone(), srv.status())) + .collect(), + }; + + Json(map) } pub async fn show( Path(name): Path, - State(services): State, + State(services): State, ) -> Result { services - .check_one(&name) - .await - .ok_or_else(|| Error::ServiceNotFound(name))? + .get(&name) + .map(|s| s.status()) + .ok_or_else(|| Error::ServiceNotFound(name)) } -- cgit v1.2.3-70-g09d2