refactor(body): combine Empty and Once variants for Body
This commit is contained in:
16
src/body.rs
16
src/body.rs
@@ -124,14 +124,13 @@ pub struct Body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
enum Kind {
|
enum Kind {
|
||||||
|
Once(Option<Chunk>),
|
||||||
Chan {
|
Chan {
|
||||||
_close_tx: oneshot::Sender<()>,
|
_close_tx: oneshot::Sender<()>,
|
||||||
rx: mpsc::Receiver<Result<Chunk, ::Error>>,
|
rx: mpsc::Receiver<Result<Chunk, ::Error>>,
|
||||||
},
|
},
|
||||||
H2(h2::RecvStream),
|
H2(h2::RecvStream),
|
||||||
Wrapped(Box<Stream<Item=Chunk, Error=Box<::std::error::Error + Send + Sync>> + Send>),
|
Wrapped(Box<Stream<Item=Chunk, Error=Box<::std::error::Error + Send + Sync>> + Send>),
|
||||||
Once(Option<Chunk>),
|
|
||||||
Empty,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type DelayEofUntil = oneshot::Receiver<Never>;
|
type DelayEofUntil = oneshot::Receiver<Never>;
|
||||||
@@ -169,7 +168,7 @@ impl Body {
|
|||||||
/// ```
|
/// ```
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn empty() -> Body {
|
pub fn empty() -> Body {
|
||||||
Body::new(Kind::Empty)
|
Body::new(Kind::Once(None))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create a `Body` stream with an associated sender half.
|
/// Create a `Body` stream with an associated sender half.
|
||||||
@@ -279,6 +278,7 @@ impl Body {
|
|||||||
|
|
||||||
fn poll_inner(&mut self) -> Poll<Option<Chunk>, ::Error> {
|
fn poll_inner(&mut self) -> Poll<Option<Chunk>, ::Error> {
|
||||||
match self.kind {
|
match self.kind {
|
||||||
|
Kind::Once(ref mut val) => Ok(Async::Ready(val.take())),
|
||||||
Kind::Chan { ref mut rx, .. } => match rx.poll().expect("mpsc cannot error") {
|
Kind::Chan { ref mut rx, .. } => match rx.poll().expect("mpsc cannot error") {
|
||||||
Async::Ready(Some(Ok(chunk))) => Ok(Async::Ready(Some(chunk))),
|
Async::Ready(Some(Ok(chunk))) => Ok(Async::Ready(Some(chunk))),
|
||||||
Async::Ready(Some(Err(err))) => Err(err),
|
Async::Ready(Some(Err(err))) => Err(err),
|
||||||
@@ -297,8 +297,6 @@ impl Body {
|
|||||||
.map_err(::Error::new_body)
|
.map_err(::Error::new_body)
|
||||||
},
|
},
|
||||||
Kind::Wrapped(ref mut s) => s.poll().map_err(::Error::new_body),
|
Kind::Wrapped(ref mut s) => s.poll().map_err(::Error::new_body),
|
||||||
Kind::Once(ref mut val) => Ok(Async::Ready(val.take())),
|
|
||||||
Kind::Empty => Ok(Async::Ready(None)),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -328,22 +326,20 @@ impl Payload for Body {
|
|||||||
|
|
||||||
fn is_end_stream(&self) -> bool {
|
fn is_end_stream(&self) -> bool {
|
||||||
match self.kind {
|
match self.kind {
|
||||||
|
Kind::Once(ref val) => val.is_none(),
|
||||||
Kind::Chan { .. } => false,
|
Kind::Chan { .. } => false,
|
||||||
Kind::H2(ref h2) => h2.is_end_stream(),
|
Kind::H2(ref h2) => h2.is_end_stream(),
|
||||||
Kind::Wrapped(..) => false,
|
Kind::Wrapped(..) => false,
|
||||||
Kind::Once(ref val) => val.is_none(),
|
|
||||||
Kind::Empty => true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn content_length(&self) -> Option<u64> {
|
fn content_length(&self) -> Option<u64> {
|
||||||
match self.kind {
|
match self.kind {
|
||||||
|
Kind::Once(Some(ref val)) => Some(val.len() as u64),
|
||||||
|
Kind::Once(None) => Some(0),
|
||||||
Kind::Chan { .. } => None,
|
Kind::Chan { .. } => None,
|
||||||
Kind::H2(..) => None,
|
Kind::H2(..) => None,
|
||||||
Kind::Wrapped(..) => None,
|
Kind::Wrapped(..) => None,
|
||||||
Kind::Once(Some(ref val)) => Some(val.len() as u64),
|
|
||||||
Kind::Once(None) => None,
|
|
||||||
Kind::Empty => Some(0)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user