use std::io::{Read, Result as IoResult};
use serde::de::DeserializeOwned;
use reqwest::Response as RawResponse;
use error::{self, Result};
use elastic_reqwest::SyncFromResponse;
use elastic_reqwest::res::parse;
use super::parse::IsOk;
pub struct SyncResponseBuilder(RawResponse);
pub(crate) fn sync_response(res: RawResponse) -> SyncResponseBuilder {
SyncResponseBuilder(res)
}
impl SyncResponseBuilder {
pub fn status(&self) -> u16 {
self.0.status().into()
}
pub fn into_raw(self) -> SyncHttpResponse {
SyncHttpResponse(self.0)
}
pub fn into_response<T>(self) -> Result<T>
where
T: IsOk + DeserializeOwned,
{
let status = self.status();
parse()
.from_response(self.0)
.map_err(|e| error::response(status, e))
}
}
pub struct SyncHttpResponse(RawResponse);
impl SyncHttpResponse {
pub fn status(&self) -> u16 {
self.0.status().into()
}
}
impl Read for SyncHttpResponse {
fn read(&mut self, buf: &mut [u8]) -> IoResult<usize> {
self.0.read(buf)
}
}