tcp_request/request/request_builder/
impl.rs1use 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}