tcplane/server/response/
impl.rs

1use super::error::Error;
2use crate::*;
3
4impl Default for Response {
5    #[inline]
6    fn default() -> Self {
7        Self(Vec::new())
8    }
9}
10
11impl Response {
12    #[inline]
13    pub fn from<T: Into<ResponseData>>(data: T) -> Self {
14        Self(data.into())
15    }
16
17    #[inline]
18    pub fn get_response_data(&self) -> &ResponseData {
19        &self.0
20    }
21
22    #[inline]
23    pub fn set_response_data<T: Into<ResponseData>>(&mut self, data: T) -> &mut Self {
24        self.0 = data.into();
25        self
26    }
27
28    #[inline]
29    pub async fn send(&mut self, stream_lock: &ArcRwLockStream) -> ResponseResult {
30        let mut stream: RwLockWriteGuard<'_, TcpStream> = stream_lock.get_write_lock().await;
31        let send_res: Result<Vec<u8>, Error> = stream
32            .write_all(&self.get_response_data())
33            .await
34            .map_err(|err| Error::ResponseError(err.to_string()))
35            .and_then(|_| Ok(self.get_response_data()))
36            .cloned();
37        let _ = stream.flush().await;
38        send_res
39    }
40}