diff --git a/network-grpc/src/service.rs b/network-grpc/src/service.rs index a83adc74a..6dacd072b 100644 --- a/network-grpc/src/service.rs +++ b/network-grpc/src/service.rs @@ -18,7 +18,7 @@ use network_core::{ use futures::future::{self, FutureResult}; use futures::prelude::*; -use futures::stream::Forward; +use futures::stream::{Forward, Fuse}; use futures::try_ready; use tower_grpc::{self, Code, Request, Response, Status, Streaming}; @@ -265,7 +265,7 @@ where Si: Sink, Si::SinkItem: FromProtobuf, { - inner: Forward, Si>, + inner: Forward>, Si>, } impl RequestStreamForwarding @@ -275,7 +275,9 @@ where Si::SinkItem: FromProtobuf, { fn new(stream: St, sink: Si) -> Self { - let stream = RequestStream::new(stream); + // Fuse the stream to work around + // https://github.com/rust-lang-nursery/futures-rs/pull/1864 + let stream = RequestStream::new(stream).fuse(); RequestStreamForwarding { inner: stream.forward(sink), } @@ -291,7 +293,7 @@ where type Item = (); type Error = core_error::Error; - fn poll(&mut self) -> Poll { + fn poll(&mut self) -> Poll<(), core_error::Error> { let _ = try_ready!(self.inner.poll()); Ok(Async::Ready(())) }