tcp_request/request/request_builder/
impl.rs

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