diff options
author | Toby Vincent <tobyv@tobyvin.dev> | 2024-09-28 00:54:46 -0500 |
---|---|---|
committer | Toby Vincent <tobyv@tobyvin.dev> | 2024-09-28 00:58:45 -0500 |
commit | cd774827dd14f68d8405c45d2d9da30b3fab050e (patch) | |
tree | a24e1cabb99170caa25edff53fc978111a1c9dd4 /src/api | |
parent | 04c7f7609e5bc3fadf95c53b37a9e6e12c4e539c (diff) |
feat: refactor into pub-sub and impl SSE
Diffstat (limited to 'src/api')
-rw-r--r-- | src/api/services.rs | 33 |
1 files changed, 21 insertions, 12 deletions
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<Status>, } -pub fn router() -> Router<Services> { +pub fn router() -> Router<ServiceHandles> { Resource::named("services").index(index).show(show).into() } pub async fn index( Query(query): Query<ServiceQuery>, - State(services): State<Services>, -) -> Result<Json<HashMap<String, Status>>, Error> { - services - .check_filtered(|name| (!query.name.as_ref().is_some_and(|s| s != name))) - .await - .map(Json) + State(services): State<ServiceHandles>, +) -> Json<HashMap<String, Status>> { + 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<String>, - State(services): State<Services>, + State(services): State<ServiceHandles>, ) -> Result<Status, Error> { services - .check_one(&name) - .await - .ok_or_else(|| Error::ServiceNotFound(name))? + .get(&name) + .map(|s| s.status()) + .ok_or_else(|| Error::ServiceNotFound(name)) } |