use super::{Headers, HttperClient};
use client::response_future::ResponseFuture;
use failure::Error;
use http;
use hyper;
use std::collections::HashMap;
#[derive(Debug)]
pub struct PayloadBuilder<'a> {
pub request_builder: Result<http::request::Builder, Error>,
pub client: &'a HttperClient,
pub payload: Option<hyper::Body>,
pub headers: Headers,
}
impl<'a> PayloadBuilder<'a> {
pub fn new(
request_builder: Result<http::request::Builder, Error>,
client: &'a HttperClient,
) -> Self {
PayloadBuilder {
request_builder,
client,
payload: None,
headers: HashMap::new(),
}
}
pub fn headers(self, headers: Headers) -> Self {
PayloadBuilder {
headers,
request_builder: self.request_builder,
client: self.client,
payload: self.payload,
}
}
pub fn payload<P: Into<hyper::Body> + Send>(self, payload: P) -> PayloadBuilder<'a>
where
hyper::Body: From<P>,
{
PayloadBuilder {
request_builder: self.request_builder,
client: self.client,
payload: Some(hyper::Body::from(payload)),
headers: self.headers,
}
}
pub fn send(self) -> ResponseFuture {
self.client.send_request(
self.request_builder,
self.payload.unwrap_or_else(|| hyper::Body::empty()),
self.headers,
)
}
}