Add RecvStream::is_end_stream. (#165)
This function returns true if the `RecvStream` has reached an end of stream state. This is intended to replace `is_empty` which has confusing behavior.
This commit is contained in:
		| @@ -330,6 +330,16 @@ impl Recv { | |||||||
|             .unwrap_or(true) |             .unwrap_or(true) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     pub fn is_end_stream(&self, stream: &store::Ptr) -> bool { | ||||||
|  |         if !stream.state.is_recv_closed() { | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         stream | ||||||
|  |             .pending_recv | ||||||
|  |             .is_empty() | ||||||
|  |     } | ||||||
|  |  | ||||||
|     pub fn recv_data( |     pub fn recv_data( | ||||||
|         &mut self, |         &mut self, | ||||||
|         frame: frame::Data, |         frame: frame::Data, | ||||||
|   | |||||||
| @@ -758,6 +758,15 @@ impl OpaqueStreamRef { | |||||||
|         me.actions.recv.body_is_empty(&stream) |         me.actions.recv.body_is_empty(&stream) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     pub fn is_end_stream(&self) -> bool { | ||||||
|  |         let mut me = self.inner.lock().unwrap(); | ||||||
|  |         let me = &mut *me; | ||||||
|  |  | ||||||
|  |         let stream = me.store.resolve(self.key); | ||||||
|  |  | ||||||
|  |         me.actions.recv.is_end_stream(&stream) | ||||||
|  |     } | ||||||
|  |  | ||||||
|     pub fn poll_data(&mut self) -> Poll<Option<Bytes>, proto::Error> { |     pub fn poll_data(&mut self) -> Poll<Option<Bytes>, proto::Error> { | ||||||
|         let mut me = self.inner.lock().unwrap(); |         let mut me = self.inner.lock().unwrap(); | ||||||
|         let me = &mut *me; |         let me = &mut *me; | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								src/share.rs
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								src/share.rs
									
									
									
									
									
								
							| @@ -70,12 +70,21 @@ impl RecvStream { | |||||||
|         RecvStream { inner } |         RecvStream { inner } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // TODO: Rename to "is_end_stream" |     #[deprecated(since = "0.0.0")] | ||||||
|  |     #[doc(hidden)] | ||||||
|     pub fn is_empty(&self) -> bool { |     pub fn is_empty(&self) -> bool { | ||||||
|         // If the recv side is closed and the receive queue is empty, the body is empty. |         // If the recv side is closed and the receive queue is empty, the body is empty. | ||||||
|         self.inner.inner.body_is_empty() |         self.inner.inner.body_is_empty() | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /// Returns true if the receive half has reached the end of stream. | ||||||
|  |     /// | ||||||
|  |     /// A return value of `true` means that calls to `poll` and `poll_trailers` | ||||||
|  |     /// will both return `None`. | ||||||
|  |     pub fn is_end_stream(&self) -> bool { | ||||||
|  |         self.inner.inner.is_end_stream() | ||||||
|  |     } | ||||||
|  |  | ||||||
|     pub fn release_capacity(&mut self) -> &mut ReleaseCapacity { |     pub fn release_capacity(&mut self) -> &mut ReleaseCapacity { | ||||||
|         &mut self.inner |         &mut self.inner | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -161,6 +161,7 @@ fn release_capacity_of_small_amount_does_not_send_window_update() { | |||||||
|                 .and_then(|resp| { |                 .and_then(|resp| { | ||||||
|                     assert_eq!(resp.status(), StatusCode::OK); |                     assert_eq!(resp.status(), StatusCode::OK); | ||||||
|                     let body = resp.into_parts().1; |                     let body = resp.into_parts().1; | ||||||
|  |                     assert!(!body.is_end_stream()); | ||||||
|                     body.into_future().unwrap() |                     body.into_future().unwrap() | ||||||
|                 }) |                 }) | ||||||
|                 // read the small body and then release it |                 // read the small body and then release it | ||||||
|   | |||||||
| @@ -169,7 +169,9 @@ fn closed_streams_are_released() { | |||||||
|             // stream wired. |             // stream wired. | ||||||
|             assert_eq!(1, client.num_wired_streams()); |             assert_eq!(1, client.num_wired_streams()); | ||||||
|  |  | ||||||
|             drop(response); |             let (_, body) = response.into_parts(); | ||||||
|  |             assert!(body.is_end_stream()); | ||||||
|  |             drop(body); | ||||||
|  |  | ||||||
|             // The stream state is now free |             // The stream state is now free | ||||||
|             assert_eq!(0, client.num_wired_streams()); |             assert_eq!(0, client.num_wired_streams()); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user