Skip to content

Commit d82d0e8

Browse files
committed
Revert FusedFuture implementations for Feed and FeedAll
The provided implementations did not account for the underlying stream or sink returning an Err. Accounting for the error cases requires extra logic or flags, which may not be worth it.
1 parent 70b375a commit d82d0e8

File tree

3 files changed

+11
-21
lines changed

3 files changed

+11
-21
lines changed

futures-util/src/sink/feed.rs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use core::pin::Pin;
2-
use futures_core::future::{Future, FusedFuture};
2+
use futures_core::future::Future;
33
use futures_core::task::{Context, Poll};
44
use futures_sink::Sink;
55

@@ -25,6 +25,10 @@ impl<'a, Si: Sink<Item> + Unpin + ?Sized, Item> Feed<'a, Si, Item> {
2525
pub(super) fn sink_pin_mut(&mut self) -> Pin<&mut Si> {
2626
Pin::new(self.sink)
2727
}
28+
29+
pub(super) fn is_item_pending(&self) -> bool {
30+
self.item.is_some()
31+
}
2832
}
2933

3034
impl<Si: Sink<Item> + Unpin + ?Sized, Item> Future for Feed<'_, Si, Item> {
@@ -42,9 +46,3 @@ impl<Si: Sink<Item> + Unpin + ?Sized, Item> Future for Feed<'_, Si, Item> {
4246
Poll::Ready(Ok(()))
4347
}
4448
}
45-
46-
impl<Si: Sink<Item> + Unpin + ?Sized, Item> FusedFuture for Feed<'_, Si, Item> {
47-
fn is_terminated(&self) -> bool {
48-
self.item.is_none()
49-
}
50-
}

futures-util/src/sink/feed_all.rs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use crate::stream::TryStreamExt;
22
use core::fmt;
33
use core::pin::Pin;
4-
use futures_core::future::{Future, FusedFuture};
5-
use futures_core::stream::{TryStream, Stream, FusedStream};
4+
use futures_core::future::Future;
5+
use futures_core::stream::{TryStream, Stream};
66
use futures_core::task::{Context, Poll};
77
use futures_sink::Sink;
88

@@ -113,13 +113,3 @@ where
113113
}
114114
}
115115
}
116-
117-
impl<Si, St, Ok, Error> FusedFuture for FeedAll<'_, Si, St>
118-
where
119-
Si: Sink<Ok, Error = Error> + Unpin + ?Sized,
120-
St: Stream<Item = Result<Ok, Error>> + FusedStream + Unpin + ?Sized,
121-
{
122-
fn is_terminated(&self) -> bool {
123-
self.buffered.is_none() && self.stream.is_terminated()
124-
}
125-
}

futures-util/src/sink/send.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use super::Feed;
22
use core::pin::Pin;
3-
use futures_core::future::{Future, FusedFuture};
3+
use futures_core::future::Future;
44
use futures_core::task::{Context, Poll};
55
use futures_sink::Sink;
66

@@ -30,8 +30,10 @@ impl<Si: Sink<Item> + Unpin + ?Sized, Item> Future for Send<'_, Si, Item> {
3030
cx: &mut Context<'_>,
3131
) -> Poll<Self::Output> {
3232
let this = &mut *self;
33-
if !this.feed.is_terminated() {
33+
34+
if this.feed.is_item_pending() {
3435
ready!(Pin::new(&mut this.feed).poll(cx))?;
36+
debug_assert!(!this.feed.is_item_pending());
3537
}
3638

3739
// we're done sending the item, but want to block on flushing the

0 commit comments

Comments
 (0)