use std::collections::HashMap; use axum::{ Json, extract::{Path, State}, http::StatusCode, }; use crate::{Device, Room}; pub async fn get_room( State(server_state): State, Path(name): Path, ) -> Result, StatusCode> { let house = server_state.read().await; let Some(room) = house.get_rooms().get(&name) else { return Err(StatusCode::NOT_FOUND); }; Ok(room.clone().into()) } pub async fn put_room( State(server_state): State, Path(name): Path, Json(room): Json, ) -> StatusCode { let mut house = server_state.write().await; house.add_room(name, room); StatusCode::CREATED } pub async fn delete_room( State(server_state): State, Path(name): Path, ) -> StatusCode { server_state.write().await.del_room(&name); StatusCode::ACCEPTED } pub async fn get_devices( State(server_state): State, Path(name): Path, ) -> Result>, StatusCode> { let house = server_state.read().await; let Some(room) = house.get_rooms().get(&name) else { return Err(StatusCode::NOT_FOUND); }; Ok(room.get_devices().clone().into()) }