use super::*;
#[derive(Clone, Debug, Default)]
pub struct RequestBuilder {
request: HttpRequest,
}
impl RequestBuilder {
pub fn new() -> Self {
Self::default()
}
pub fn get(&mut self, url: impl Into<String>) -> &mut Self {
self.request.set_method(Method::Get);
self.request.set_url(url);
self
}
pub fn post(&mut self, url: impl Into<String>) -> &mut Self {
self.request.set_method(Method::Post);
self.request.set_url(url);
self
}
pub fn method(&mut self, method: Method) -> &mut Self {
self.request.set_method(method);
self
}
pub fn url(&mut self, url: impl Into<String>) -> &mut Self {
self.request.set_url(url);
self
}
pub fn header<K: AsRef<str>, V: AsRef<str>>(&mut self, key: K, value: V) -> &mut Self {
self.request.set_header(key, value);
self
}
pub fn headers<K, V>(&mut self, headers: HashMap<K, V>) -> &mut Self
where
K: AsRef<str>,
V: AsRef<str>,
{
for (k, v) in headers {
self.request.set_header(k, v);
}
self
}
pub fn remove_header<K: AsRef<str>>(&mut self, key: K) -> &mut Self {
self.request.remove_header(key);
self
}
pub fn clear_headers(&mut self) -> &mut Self {
self.request.clear_headers();
self
}
pub fn body<B: Into<Vec<u8>>>(&mut self, bytes: B) -> &mut Self {
self.request.set_body(Body::from_bytes(bytes));
self
}
pub fn body_text<T: Into<String>>(&mut self, text: T) -> &mut Self {
self.request
.set_body(Body::from_bytes(text.into().into_bytes()));
self
}
pub fn body_json<V: serde::Serialize>(&mut self, value: &V) -> &mut Self {
if let Ok(bytes) = serde_json::to_vec(value) {
self.request.set_body(Body::from_bytes(bytes));
}
self
}
pub fn timeout(&mut self, ms: u64) -> &mut Self {
self.request.config.set_timeout(ms);
self
}
pub fn buffer_size(&mut self, n: usize) -> &mut Self {
self.request.config.set_buffer_size(n);
self
}
pub fn http1_1_only(&mut self) -> &mut Self {
self.request.config.http_version = HttpVersion::Http1_1;
self
}
pub fn http2_only(&mut self) -> &mut Self {
self.request.config.http_version = HttpVersion::Http2;
self
}
pub fn redirect(&mut self) -> &mut Self {
self.request.config.set_redirect(true);
self
}
pub fn no_redirect(&mut self) -> &mut Self {
self.request.config.set_redirect(false);
self
}
pub fn max_redirect_times(&mut self, n: usize) -> &mut Self {
self.request.config.set_max_redirect_times(n);
self
}
pub fn decode(&mut self) -> &mut Self {
self.request.config.set_decode(true);
self
}
pub fn no_decode(&mut self) -> &mut Self {
self.request.config.set_decode(false);
self
}
pub fn proxy(&mut self, proxy: Proxy) -> &mut Self {
self.request.config.set_proxy(Some(proxy));
self
}
pub fn no_proxy(&mut self) -> &mut Self {
self.request.config.set_proxy(None);
self
}
pub fn build(&mut self) -> HttpRequest {
std::mem::take(&mut self.request)
}
}