use crate::blocking::runtime;
use bytes::Bytes;
use futures::executor;
use hyper::{HeaderMap, StatusCode};
use std::io::{self, Read};
use tokio::io::AsyncReadExt;
pub struct Response(crate::Response);
impl Response {
pub(crate) fn new(inner: crate::Response) -> Response {
Response(inner)
}
pub fn status(&self) -> StatusCode {
self.0.status()
}
pub fn headers(&self) -> &HeaderMap {
self.0.headers()
}
pub fn into_body(self) -> ResponseBody {
ResponseBody(self.0.into_body())
}
}
pub struct ResponseBody(crate::ResponseBody);
impl ResponseBody {
pub fn read_bytes(&mut self) -> io::Result<Option<Bytes>> {
runtime()?.enter(|| executor::block_on(self.0.read_bytes()))
}
}
impl Read for ResponseBody {
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
runtime()?.enter(|| executor::block_on(self.0.read(buf)))
}
}