use axum::{ Json, extract::{Path, State}, http::StatusCode, }; use crate::{Device, Room}; pub async fn get_device( State(server_state): State, Path((room, device)): Path<(String, String)>, ) -> Result, StatusCode> { let house = server_state.read().await; let Some(room) = house.get_rooms().get(&room) else { return Err(StatusCode::NOT_FOUND); }; let Some(device) = room.get_devices().get(&device) else { return Err(StatusCode::NOT_FOUND); }; Ok(device.clone().into()) } pub async fn put_device( State(server_state): State, Path((room, name)): Path<(String, String)>, Json(device): Json, ) -> StatusCode { let mut house = server_state.write().await; let room = house.get_rooms_mut().entry(room).or_insert(Room::default()); room.get_devices_mut().insert(name, device); StatusCode::CREATED } pub async fn delete_device( State(server_state): State, Path((room, device)): Path<(String, String)>, ) -> StatusCode { let mut house = server_state.write().await; let Some(room) = house.get_rooms_mut().get_mut(&room) else { return StatusCode::ACCEPTED; }; room.get_devices_mut().remove(&device); StatusCode::ACCEPTED }