http_request/request/request_builder/
struct.rs1use super::*;
2
3#[derive(Clone, Debug, Default)]
32pub struct RequestBuilder {
33 request: HttpRequest,
34}
35
36impl RequestBuilder {
37 pub fn new() -> Self {
39 Self::default()
40 }
41
42 pub fn get(&mut self, url: impl Into<String>) -> &mut Self {
44 self.request.set_method(Method::Get);
45 self.request.set_url(url);
46 self
47 }
48
49 pub fn post(&mut self, url: impl Into<String>) -> &mut Self {
51 self.request.set_method(Method::Post);
52 self.request.set_url(url);
53 self
54 }
55
56 pub fn method(&mut self, method: Method) -> &mut Self {
58 self.request.set_method(method);
59 self
60 }
61
62 pub fn url(&mut self, url: impl Into<String>) -> &mut Self {
64 self.request.set_url(url);
65 self
66 }
67
68 pub fn header<K: AsRef<str>, V: AsRef<str>>(&mut self, key: K, value: V) -> &mut Self {
70 self.request.set_header(key, value);
71 self
72 }
73
74 pub fn headers<K, V>(&mut self, headers: HashMap<K, V>) -> &mut Self
76 where
77 K: AsRef<str>,
78 V: AsRef<str>,
79 {
80 for (k, v) in headers {
81 self.request.set_header(k, v);
82 }
83 self
84 }
85
86 pub fn remove_header<K: AsRef<str>>(&mut self, key: K) -> &mut Self {
88 self.request.remove_header(key);
89 self
90 }
91
92 pub fn clear_headers(&mut self) -> &mut Self {
94 self.request.clear_headers();
95 self
96 }
97
98 pub fn body<B: Into<Vec<u8>>>(&mut self, bytes: B) -> &mut Self {
100 self.request.set_body(Body::from_bytes(bytes));
101 self
102 }
103
104 pub fn body_text<T: Into<String>>(&mut self, text: T) -> &mut Self {
106 self.request
107 .set_body(Body::from_bytes(text.into().into_bytes()));
108 self
109 }
110
111 pub fn body_json<V: serde::Serialize>(&mut self, value: &V) -> &mut Self {
113 if let Ok(bytes) = serde_json::to_vec(value) {
114 self.request.set_body(Body::from_bytes(bytes));
115 }
116 self
117 }
118
119 pub fn timeout(&mut self, ms: u64) -> &mut Self {
121 self.request.config.set_timeout(ms);
122 self
123 }
124
125 pub fn buffer_size(&mut self, n: usize) -> &mut Self {
127 self.request.config.set_buffer_size(n);
128 self
129 }
130
131 pub fn http1_1_only(&mut self) -> &mut Self {
133 self.request.config.http_version = HttpVersion::Http1_1;
134 self
135 }
136
137 pub fn http2_only(&mut self) -> &mut Self {
139 self.request.config.http_version = HttpVersion::Http2;
140 self
141 }
142
143 pub fn redirect(&mut self) -> &mut Self {
145 self.request.config.set_redirect(true);
146 self
147 }
148
149 pub fn no_redirect(&mut self) -> &mut Self {
151 self.request.config.set_redirect(false);
152 self
153 }
154
155 pub fn max_redirect_times(&mut self, n: usize) -> &mut Self {
157 self.request.config.set_max_redirect_times(n);
158 self
159 }
160
161 pub fn decode(&mut self) -> &mut Self {
163 self.request.config.set_decode(true);
164 self
165 }
166
167 pub fn no_decode(&mut self) -> &mut Self {
169 self.request.config.set_decode(false);
170 self
171 }
172
173 pub fn proxy(&mut self, proxy: Proxy) -> &mut Self {
179 self.request.config.set_proxy(Some(proxy));
180 self
181 }
182
183 pub fn no_proxy(&mut self) -> &mut Self {
185 self.request.config.set_proxy(None);
186 self
187 }
188
189 pub fn build(&mut self) -> HttpRequest {
191 std::mem::take(&mut self.request)
192 }
193}