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 { | ||||
|     Once(Option<Chunk>), | ||||
|     Chan { | ||||
|         _close_tx: oneshot::Sender<()>, | ||||
|         rx: mpsc::Receiver<Result<Chunk, ::Error>>, | ||||
|     }, | ||||
|     H2(h2::RecvStream), | ||||
|     Wrapped(Box<Stream<Item=Chunk, Error=Box<::std::error::Error + Send + Sync>> + Send>), | ||||
|     Once(Option<Chunk>), | ||||
|     Empty, | ||||
| } | ||||
|  | ||||
| type DelayEofUntil = oneshot::Receiver<Never>; | ||||
| @@ -169,7 +168,7 @@ impl Body { | ||||
|     /// ``` | ||||
|     #[inline] | ||||
|     pub fn empty() -> Body { | ||||
|         Body::new(Kind::Empty) | ||||
|         Body::new(Kind::Once(None)) | ||||
|     } | ||||
|  | ||||
|     /// Create a `Body` stream with an associated sender half. | ||||
| @@ -279,6 +278,7 @@ impl Body { | ||||
|  | ||||
|     fn poll_inner(&mut self) -> Poll<Option<Chunk>, ::Error> { | ||||
|         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") { | ||||
|                 Async::Ready(Some(Ok(chunk))) => Ok(Async::Ready(Some(chunk))), | ||||
|                 Async::Ready(Some(Err(err))) => Err(err), | ||||
| @@ -297,8 +297,6 @@ impl Body { | ||||
|                     .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 { | ||||
|         match self.kind { | ||||
|             Kind::Once(ref val) => val.is_none(), | ||||
|             Kind::Chan { .. } => false, | ||||
|             Kind::H2(ref h2) => h2.is_end_stream(), | ||||
|             Kind::Wrapped(..) => false, | ||||
|             Kind::Once(ref val) => val.is_none(), | ||||
|             Kind::Empty => true | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     fn content_length(&self) -> Option<u64> { | ||||
|         match self.kind { | ||||
|             Kind::Once(Some(ref val)) => Some(val.len() as u64), | ||||
|             Kind::Once(None) => Some(0), | ||||
|             Kind::Chan { .. } => None, | ||||
|             Kind::H2(..) => 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