50 lines
1.2 KiB
Rust
50 lines
1.2 KiB
Rust
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<super::ServerState>,
|
|
Path(name): Path<String>,
|
|
) -> Result<Json<Room>, 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<super::ServerState>,
|
|
Path(name): Path<String>,
|
|
Json(room): Json<Room>,
|
|
) -> StatusCode {
|
|
let mut house = server_state.write().await;
|
|
house.add_room(name, room);
|
|
StatusCode::CREATED
|
|
}
|
|
|
|
pub async fn delete_room(
|
|
State(server_state): State<super::ServerState>,
|
|
Path(name): Path<String>,
|
|
) -> StatusCode {
|
|
server_state.write().await.del_room(&name);
|
|
StatusCode::ACCEPTED
|
|
}
|
|
|
|
pub async fn get_devices(
|
|
State(server_state): State<super::ServerState>,
|
|
Path(name): Path<String>,
|
|
) -> Result<Json<HashMap<String, Device>>, 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())
|
|
}
|