use super::*;
#[derive(Clone, Data, Debug, Default)]
pub struct RequestBuilder {
#[get(pub(crate))]
#[get_mut(pub(crate))]
#[set(pub(crate))]
request: HttpRequest,
}
impl RequestBuilder {
pub fn get_request_mut(&mut self) -> &mut HttpRequest {
&mut self.request
}
pub fn new() -> Self {
Self::default()
}
pub fn get(&mut self, url: impl Into<String>) -> &mut Self {
self.get_mut_request().set_method(Method::Get);
self.get_mut_request().set_url(url);
self
}
pub fn post(&mut self, url: impl Into<String>) -> &mut Self {
self.get_mut_request().set_method(Method::Post);
self.get_mut_request().set_url(url);
self
}
pub fn method(&mut self, method: Method) -> &mut Self {
self.get_mut_request().set_method(method);
self
}
pub fn url(&mut self, url: impl Into<String>) -> &mut Self {
self.get_mut_request().set_url(url);
self
}
pub fn header<K: AsRef<str>, V: AsRef<str>>(&mut self, key: K, value: V) -> &mut Self {
self.get_mut_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.get_mut_request().set_header(k, v);
}
self
}
pub fn remove_header<K: AsRef<str>>(&mut self, key: K) -> &mut Self {
self.get_mut_request().remove_header(key);
self
}
pub fn clear_headers(&mut self) -> &mut Self {
self.get_mut_request().clear_headers();
self
}
pub fn body<B: Into<Vec<u8>>>(&mut self, bytes: B) -> &mut Self {
self.get_mut_request().set_body(Body::from_bytes(bytes));
self
}
pub fn body_text<T: Into<String>>(&mut self, text: T) -> &mut Self {
self.get_mut_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.get_mut_request().set_body(Body::from_bytes(bytes));
}
self
}
pub fn timeout(&mut self, ms: u64) -> &mut Self {
self.get_mut_request().get_config_mut().set_timeout(ms);
self
}
pub fn buffer_size(&mut self, n: usize) -> &mut Self {
self.get_mut_request().get_config_mut().set_buffer_size(n);
self
}
pub fn http1_1_only(&mut self) -> &mut Self {
self.get_mut_request()
.get_config_mut()
.set_http_version(HttpVersion::Http1_1);
self
}
pub fn http2_only(&mut self) -> &mut Self {
self.get_mut_request()
.get_config_mut()
.set_http_version(HttpVersion::Http2);
self
}
pub fn redirect(&mut self) -> &mut Self {
self.get_mut_request().get_config_mut().set_redirect(true);
self
}
pub fn no_redirect(&mut self) -> &mut Self {
self.get_mut_request().get_config_mut().set_redirect(false);
self
}
pub fn max_redirect_times(&mut self, n: usize) -> &mut Self {
self.get_mut_request()
.get_config_mut()
.set_max_redirect_times(n);
self
}
pub fn decode(&mut self) -> &mut Self {
self.get_mut_request().get_config_mut().set_decode(true);
self
}
pub fn no_decode(&mut self) -> &mut Self {
self.get_mut_request().get_config_mut().set_decode(false);
self
}
pub fn proxy(&mut self, proxy: Proxy) -> &mut Self {
self.get_mut_request()
.get_config_mut()
.set_proxy(Some(proxy));
self
}
pub fn no_proxy(&mut self) -> &mut Self {
self.get_mut_request().get_config_mut().set_proxy(None);
self
}
pub fn build(&mut self) -> HttpRequest {
std::mem::take(self.get_mut_request())
}
}