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:
Carl Lerche
2017-10-21 09:59:27 -07:00
committed by GitHub
parent 17453dd307
commit c23d11306e
5 changed files with 33 additions and 2 deletions

View File

@@ -330,6 +330,16 @@ impl Recv {
.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(
&mut self,
frame: frame::Data,

View File

@@ -758,6 +758,15 @@ impl OpaqueStreamRef {
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> {
let mut me = self.inner.lock().unwrap();
let me = &mut *me;

View File

@@ -70,12 +70,21 @@ impl RecvStream {
RecvStream { inner }
}
// TODO: Rename to "is_end_stream"
#[deprecated(since = "0.0.0")]
#[doc(hidden)]
pub fn is_empty(&self) -> bool {
// If the recv side is closed and the receive queue is empty, the 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 {
&mut self.inner
}