Skip to main content

tcp_request/request/request_builder/
impl.rs

1use super::*;
2
3/// Default implementation for RequestBuilder.
4impl Default for RequestBuilder {
5    /// Creates a default RequestBuilder instance.
6    ///
7    /// # Returns
8    ///
9    /// - `RequestBuilder` - A new RequestBuilder with default configuration.
10    #[inline(always)]
11    fn default() -> Self {
12        Self {
13            tcp_request: TcpRequest::default(),
14            builder: TcpRequest::default(),
15        }
16    }
17}
18
19/// Implementation for RequestBuilder methods.
20impl RequestBuilder {
21    /// Creates a new RequestBuilder instance.
22    ///
23    /// # Returns
24    ///
25    /// - `RequestBuilder` - A new RequestBuilder with default configuration.
26    #[inline(always)]
27    pub fn new() -> Self {
28        Self::default()
29    }
30
31    /// Sets the target host for the request.
32    ///
33    /// # Arguments
34    ///
35    /// - `T` - The host address (any type that implements Into<String>).
36    ///
37    /// # Returns
38    ///
39    /// - `&mut Self` - The builder for method chaining.
40    pub fn host<T>(&mut self, host: T) -> &mut Self
41    where
42        T: Into<String>,
43    {
44        let _: Result<(), PoisonError<RwLockWriteGuard<'_, Config>>> =
45            self.get_tcp_request().get_config().write().map(
46                |mut data: RwLockWriteGuard<'_, Config>| {
47                    data.host = host.into();
48                },
49            );
50        self
51    }
52
53    /// Sets the target port for the request.
54    ///
55    /// # Arguments
56    ///
57    /// - `usize` - The port number.
58    ///
59    /// # Returns
60    ///
61    /// - `&mut Self` - The builder for method chaining.
62    pub fn port(&mut self, port: usize) -> &mut Self {
63        let _: Result<(), PoisonError<RwLockWriteGuard<'_, Config>>> =
64            self.get_tcp_request().get_config().write().map(
65                |mut data: RwLockWriteGuard<'_, Config>| {
66                    data.port = port;
67                },
68            );
69        self
70    }
71
72    /// Sets the buffer size for the request.
73    ///
74    /// # Arguments
75    ///
76    /// - `usize` - The buffer size in bytes.
77    ///
78    /// # Returns
79    ///
80    /// - `&mut Self` - The builder for method chaining.
81    pub fn buffer(&mut self, buffer_size: usize) -> &mut Self {
82        let _: Result<(), PoisonError<RwLockWriteGuard<'_, Config>>> =
83            self.get_tcp_request().get_config().write().map(
84                |mut data: RwLockWriteGuard<'_, Config>| {
85                    data.buffer_size = buffer_size;
86                },
87            );
88        self
89    }
90
91    /// Sets the timeout for the request in milliseconds.
92    ///
93    /// # Arguments
94    ///
95    /// - `u64` - The timeout duration in milliseconds.
96    ///
97    /// # Returns
98    ///
99    /// - `&mut Self` - The builder for method chaining.
100    pub fn timeout(&mut self, timeout: u64) -> &mut Self {
101        let _: Result<(), PoisonError<RwLockWriteGuard<'_, Config>>> =
102            self.get_tcp_request().get_config().write().map(
103                |mut data: RwLockWriteGuard<'_, Config>| {
104                    data.timeout = timeout;
105                },
106            );
107        self
108    }
109
110    /// Builds and returns the configured request.
111    ///
112    /// # Returns
113    ///
114    /// - `BoxRequestTrait` - A boxed request trait object ready for use.
115    pub fn build(&mut self) -> BoxRequestTrait {
116        let tcp_request: TcpRequest = self.get_tcp_request().clone();
117        self.set_builder(tcp_request);
118        self.set_tcp_request(TcpRequest::default());
119        Box::new(self.get_builder().clone())
120    }
121}