tcplane/server/response/
impl.rs1use 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}