use std::collections::VecDeque; use anyhow::Error; use async_trait::async_trait; use http_body_util::Full; use hyper::body::Bytes; use hyper::Response; use hyper::http::request::Parts; use cove_net_common::message::c2s::account::register::RegisterMessage; use cove_net_common::message::c2s::ClientToServerMessage; use crate::message::handlers::base::handler::{CoveBodyDeserializer, CoveRequestHandler}; use crate::message::handlers::base::middleware::AssociatedDataMap; pub struct RegisterMessageHandler; #[async_trait] impl CoveRequestHandler for RegisterMessageHandler { async fn handle_request(&self, request_parts: Parts, body: Bytes, path: &mut VecDeque<&str>, associated_data: &mut AssociatedDataMap) -> Result>, Error> { let msg = self.body_to_message(body).await?; Ok(Response::new( serde_json::to_string(&msg.create_s2c_message())?.into() )) } } #[async_trait] impl CoveBodyDeserializer for RegisterMessageHandler { async fn body_to_message(&self, body: Bytes) -> Result { Ok(serde_json::from_slice(&body)?) } }