tcp_request/request/request_builder/
impl.rs

1use std::sync::{Arc, RwLock};
2
3use http_type::HTTP_DOUBLE_BR_BYTES;
4
5use super::r#type::RequestBuilder;
6use crate::request::{r#type::BoxRequestTrait, request::r#type::TcpRequest};
7
8impl Default for RequestBuilder {
9    #[inline]
10    fn default() -> Self {
11        Self {
12            tcp_request: TcpRequest::default(),
13            builder: TcpRequest::default(),
14        }
15    }
16}
17
18impl RequestBuilder {
19    #[inline]
20    pub fn new() -> Self {
21        Self::default()
22    }
23
24    #[inline]
25    pub fn host<T>(&mut self, host: T) -> &mut Self
26    where
27        T: Into<String>,
28    {
29        let _ = self
30            .tcp_request
31            .get_mut_config()
32            .write()
33            .and_then(|mut data| {
34                data.host = host.into();
35                Ok(())
36            });
37        self
38    }
39
40    #[inline]
41    pub fn port(&mut self, port: usize) -> &mut Self {
42        let _ = self
43            .tcp_request
44            .get_mut_config()
45            .write()
46            .and_then(|mut data| {
47                data.port = port;
48                Ok(())
49            });
50        self
51    }
52
53    #[inline]
54    pub fn data<T>(&mut self, data: T) -> &mut Self
55    where
56        T: Into<Vec<u8>>,
57    {
58        let mut data_clone: Vec<u8> = data.into();
59        data_clone.extend_from_slice(HTTP_DOUBLE_BR_BYTES);
60        self.tcp_request.data = Arc::new(RwLock::new(data_clone));
61        self
62    }
63
64    #[inline]
65    pub fn buffer(&mut self, buffer_size: usize) -> &mut Self {
66        let _ = self
67            .tcp_request
68            .get_mut_config()
69            .write()
70            .and_then(|mut data| {
71                data.buffer_size = buffer_size;
72                Ok(())
73            });
74        self
75    }
76
77    #[inline]
78    pub fn timeout(&mut self, timeout: u64) -> &mut Self {
79        let _ = self
80            .tcp_request
81            .get_mut_config()
82            .write()
83            .and_then(|mut data| {
84                data.timeout = timeout;
85                Ok(())
86            });
87        self
88    }
89
90    #[inline]
91    pub fn build(&mut self) -> BoxRequestTrait {
92        self.builder = self.tcp_request.clone();
93        self.tcp_request = TcpRequest::default();
94        Box::new(self.builder.clone())
95    }
96}