39 lines
887 B
Rust
39 lines
887 B
Rust
use axum::{
|
|
extract::{Request, FromRequest, Path},
|
|
body::{Body},
|
|
|
|
http::StatusCode,
|
|
Json, Router,
|
|
};
|
|
use serde::Deserialize;
|
|
|
|
#[derive(Deserialize, Debug)]
|
|
pub struct UpdateRoomValues {
|
|
pub status: String,
|
|
pub token: String,
|
|
pub hotel_id: i32,
|
|
}
|
|
|
|
pub struct UpdateRoomPayload(pub UpdateRoomValues);
|
|
|
|
//#[async_trait]
|
|
impl<S> FromRequest<S> for UpdateRoomPayload
|
|
where S: Send + Sync,
|
|
{
|
|
type Rejection = (StatusCode, String);
|
|
|
|
async fn from_request(req: Request, state: &S) -> Result<Self, Self::Rejection> {
|
|
let Json(payload) = Json::<UpdateRoomValues>::from_request(req, state)
|
|
.await
|
|
.map_err(|err| (StatusCode::BAD_REQUEST, format!("Invalid body: {}", err)))?;
|
|
|
|
Ok(UpdateRoomPayload(payload))
|
|
}
|
|
}
|
|
|
|
#[derive(Debug)]
|
|
pub struct RoomIdValue {
|
|
pub room_id: i32
|
|
}
|
|
|
|
pub type RoomIdPath = Path<i32>; |