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