use std::convert::From; use tokio_proto; use http::Chunk; use futures::{Poll, Stream}; use futures::sync::mpsc; pub type TokioBody = tokio_proto::streaming::Body; /// A `Stream` for `Chunk`s used in requests and responses. #[derive(Debug)] pub struct Body(TokioBody); impl Body { /// Return an empty body stream pub fn empty() -> Body { Body(TokioBody::empty()) } /// Return a body stream with an associated sender half pub fn pair() -> (mpsc::Sender>, Body) { let (tx, rx) = TokioBody::pair(); let rx = Body(rx); (tx, rx) } } impl Stream for Body { type Item = Chunk; type Error = ::Error; fn poll(&mut self) -> Poll, ::Error> { self.0.poll() } } impl From for tokio_proto::streaming::Body { fn from(b: Body) -> tokio_proto::streaming::Body { b.0 } } impl From> for Body { fn from(tokio_body: tokio_proto::streaming::Body) -> Body { Body(tokio_body) } } impl From>> for Body { fn from(src: mpsc::Receiver>) -> Body { Body(src.into()) } } impl From for Body { fn from (chunk: Chunk) -> Body { Body(TokioBody::from(chunk)) } } impl From> for Body { fn from (vec: Vec) -> Body { Body(TokioBody::from(Chunk::from(vec))) } } impl From<&'static [u8]> for Body { fn from (slice: &'static [u8]) -> Body { Body(TokioBody::from(Chunk::from(slice))) } } impl From for Body { fn from (s: String) -> Body { Body(TokioBody::from(Chunk::from(s.into_bytes()))) } } impl From<&'static str> for Body { fn from (slice: &'static str) -> Body { Body(TokioBody::from(Chunk::from(slice.as_bytes()))) } } fn _assert_send_sync() { fn _assert_send() {} fn _assert_sync() {} _assert_send::(); _assert_send::(); _assert_sync::(); }