use futures_cpupool::CpuPool;
use client::{AsyncSender, Client, RequestParams, Sender};
pub use elastic_reqwest::{AsyncBody, SyncBody};
pub use elastic_reqwest::req::{empty_body, DefaultBody, HttpMethod, HttpRequest, Url};
pub use elastic_reqwest::req::params;
pub use elastic_reqwest::req::endpoints;
pub use self::params::*;
pub use self::endpoints::*;
pub mod raw;
pub use self::raw::RawRequestBuilder;
pub mod search;
pub use self::search::SearchRequestBuilder;
pub mod document_get;
pub mod document_index;
pub mod document_update;
pub mod document_delete;
pub mod document_put_mapping;
pub use self::document_get::GetRequestBuilder;
pub use self::document_index::IndexRequestBuilder;
pub use self::document_update::UpdateRequestBuilder;
pub use self::document_delete::DeleteRequestBuilder;
pub use self::document_put_mapping::PutMappingRequestBuilder;
pub mod index_create;
pub mod index_open;
pub mod index_close;
pub mod index_delete;
pub use self::index_create::IndexCreateRequestBuilder;
pub use self::index_open::IndexOpenRequestBuilder;
pub use self::index_close::IndexCloseRequestBuilder;
pub use self::index_delete::IndexDeleteRequestBuilder;
pub mod ping;
pub use self::ping::PingRequestBuilder;
pub struct RequestBuilder<TSender, TRequest>
where
TSender: Sender,
{
client: Client<TSender>,
params: Option<RequestParams>,
inner: TRequest,
}
impl<TSender, TRequest> RequestBuilder<TSender, TRequest>
where
TSender: Sender,
{
fn new(client: Client<TSender>, params: Option<RequestParams>, req: TRequest) -> Self {
RequestBuilder {
client: client,
params: params,
inner: req,
}
}
pub fn params<F>(mut self, builder: F) -> Self
where
F: Fn(RequestParams) -> RequestParams,
{
let params = self.params;
let client = self.client;
self.params = { Some(builder(params.unwrap_or_else(|| client.params.clone()))) };
self.client = client;
self
}
}
impl<TRequest> RequestBuilder<AsyncSender, TRequest> {
pub fn serde_pool<P>(mut self, pool: P) -> Self
where
P: Into<Option<CpuPool>>,
{
self.client.sender.serde_pool = pool.into();
self
}
}
pub mod prelude {
pub use super::params::*;
pub use super::endpoints::*;
pub use super::{empty_body, DefaultBody, GetRequestBuilder, IndexCreateRequestBuilder, IndexRequestBuilder, PutMappingRequestBuilder, RawRequestBuilder, SearchRequestBuilder};
}
#[cfg(test)]
mod tests {
use super::RequestBuilder;
use prelude::*;
#[test]
fn request_builder_params() {
let client = SyncClientBuilder::new()
.base_url("http://eshost:9200")
.build()
.unwrap();
let req = RequestBuilder::new(client.clone(), None, PingRequest::new())
.params(|p| p.url_param("pretty", true))
.params(|p| p.url_param("refresh", true));
let params = &req.params.unwrap();
let (_, query) = params.get_url_qry();
assert_eq!("http://eshost:9200", params.get_base_url());
assert_eq!("?pretty=true&refresh=true", query.unwrap());
}
}