http_request/request/request_builder/
struct.rs1use super::*;
2
3#[derive(Clone, Data, Debug, Default)]
32pub struct RequestBuilder {
33 #[get(pub(crate))]
34 #[get_mut(pub(crate))]
35 #[set(pub(crate))]
36 request: HttpRequest,
37}
38
39impl RequestBuilder {
40 pub fn get_request_mut(&mut self) -> &mut HttpRequest {
46 &mut self.request
47 }
48
49 pub fn new() -> Self {
51 Self::default()
52 }
53
54 pub fn get(&mut self, url: impl Into<String>) -> &mut Self {
56 self.get_mut_request().set_method(Method::Get);
57 self.get_mut_request().set_url(url);
58 self
59 }
60
61 pub fn post(&mut self, url: impl Into<String>) -> &mut Self {
63 self.get_mut_request().set_method(Method::Post);
64 self.get_mut_request().set_url(url);
65 self
66 }
67
68 pub fn method(&mut self, method: Method) -> &mut Self {
70 self.get_mut_request().set_method(method);
71 self
72 }
73
74 pub fn url(&mut self, url: impl Into<String>) -> &mut Self {
76 self.get_mut_request().set_url(url);
77 self
78 }
79
80 pub fn header<K: AsRef<str>, V: AsRef<str>>(&mut self, key: K, value: V) -> &mut Self {
82 self.get_mut_request().set_header(key, value);
83 self
84 }
85
86 pub fn headers<K, V>(&mut self, headers: HashMap<K, V>) -> &mut Self
88 where
89 K: AsRef<str>,
90 V: AsRef<str>,
91 {
92 for (k, v) in headers {
93 self.get_mut_request().set_header(k, v);
94 }
95 self
96 }
97
98 pub fn remove_header<K: AsRef<str>>(&mut self, key: K) -> &mut Self {
100 self.get_mut_request().remove_header(key);
101 self
102 }
103
104 pub fn clear_headers(&mut self) -> &mut Self {
106 self.get_mut_request().clear_headers();
107 self
108 }
109
110 pub fn body<B: Into<Vec<u8>>>(&mut self, bytes: B) -> &mut Self {
112 self.get_mut_request().set_body(Body::from_bytes(bytes));
113 self
114 }
115
116 pub fn body_text<T: Into<String>>(&mut self, text: T) -> &mut Self {
118 self.get_mut_request()
119 .set_body(Body::from_bytes(text.into().into_bytes()));
120 self
121 }
122
123 pub fn body_json<V: serde::Serialize>(&mut self, value: &V) -> &mut Self {
125 if let Ok(bytes) = serde_json::to_vec(value) {
126 self.get_mut_request().set_body(Body::from_bytes(bytes));
127 }
128 self
129 }
130
131 pub fn timeout(&mut self, ms: u64) -> &mut Self {
133 self.get_mut_request().get_config_mut().set_timeout(ms);
134 self
135 }
136
137 pub fn buffer_size(&mut self, n: usize) -> &mut Self {
139 self.get_mut_request().get_config_mut().set_buffer_size(n);
140 self
141 }
142
143 pub fn http1_1_only(&mut self) -> &mut Self {
145 self.get_mut_request()
146 .get_config_mut()
147 .set_http_version(HttpVersion::Http1_1);
148 self
149 }
150
151 pub fn http2_only(&mut self) -> &mut Self {
153 self.get_mut_request()
154 .get_config_mut()
155 .set_http_version(HttpVersion::Http2);
156 self
157 }
158
159 pub fn redirect(&mut self) -> &mut Self {
161 self.get_mut_request().get_config_mut().set_redirect(true);
162 self
163 }
164
165 pub fn no_redirect(&mut self) -> &mut Self {
167 self.get_mut_request().get_config_mut().set_redirect(false);
168 self
169 }
170
171 pub fn max_redirect_times(&mut self, n: usize) -> &mut Self {
173 self.get_mut_request()
174 .get_config_mut()
175 .set_max_redirect_times(n);
176 self
177 }
178
179 pub fn decode(&mut self) -> &mut Self {
181 self.get_mut_request().get_config_mut().set_decode(true);
182 self
183 }
184
185 pub fn no_decode(&mut self) -> &mut Self {
187 self.get_mut_request().get_config_mut().set_decode(false);
188 self
189 }
190
191 pub fn proxy(&mut self, proxy: Proxy) -> &mut Self {
197 self.get_mut_request()
198 .get_config_mut()
199 .set_proxy(Some(proxy));
200 self
201 }
202
203 pub fn no_proxy(&mut self) -> &mut Self {
205 self.get_mut_request().get_config_mut().set_proxy(None);
206 self
207 }
208
209 pub fn build(&mut self) -> HttpRequest {
211 std::mem::take(self.get_mut_request())
212 }
213}