Skip to content

Commit bf4a826

Browse files
committed
Misc tweaks
1 parent 952ccf7 commit bf4a826

File tree

3 files changed

+100
-93
lines changed

3 files changed

+100
-93
lines changed

futures-util/src/stream/stream/flatten_unordered.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ pin_project! {
192192
/// Future which contains optional stream. If it's `Some`, it will attempt
193193
/// to call `poll_next` on it, returning `Some((item, next_item_fut))` in
194194
/// case of `Poll::Ready(Some(...))` or `None` in case of `Poll::Ready(None)`.
195-
/// If `poll_next` will return `Poll::Pending`, it will be forwared to
195+
/// If `poll_next` will return `Poll::Pending`, it will be forward to
196196
/// the future, and current task will be notified by waker.
197197
#[must_use = "futures do nothing unless you `.await` or poll them"]
198198
struct PollStreamFut<St> {
@@ -229,9 +229,9 @@ pin_project! {
229229
/// method.
230230
#[project = FlattenUnorderedProj]
231231
#[must_use = "streams do nothing unless polled"]
232-
pub struct FlattenUnordered<St, U> {
232+
pub struct FlattenUnordered<St> where St: Stream {
233233
#[pin]
234-
inner_streams: FuturesUnordered<PollStreamFut<U>>,
234+
inner_streams: FuturesUnordered<PollStreamFut<St::Item>>,
235235
#[pin]
236236
stream: St,
237237
poll_state: SharedPollState,
@@ -242,7 +242,7 @@ pin_project! {
242242
}
243243
}
244244

245-
impl<St> fmt::Debug for FlattenUnordered<St, St::Item>
245+
impl<St> fmt::Debug for FlattenUnordered<St>
246246
where
247247
St: Stream + fmt::Debug,
248248
St::Item: Stream + fmt::Debug,
@@ -258,12 +258,12 @@ where
258258
}
259259
}
260260

261-
impl<St> FlattenUnordered<St, St::Item>
261+
impl<St> FlattenUnordered<St>
262262
where
263263
St: Stream,
264264
St::Item: Stream + Unpin,
265265
{
266-
pub(super) fn new(stream: St, limit: Option<usize>) -> FlattenUnordered<St, St::Item> {
266+
pub(super) fn new(stream: St, limit: Option<usize>) -> FlattenUnordered<St> {
267267
let poll_state = SharedPollState::new(NEED_TO_POLL_STREAM);
268268

269269
FlattenUnordered {
@@ -288,7 +288,7 @@ where
288288
delegate_access_inner!(stream, St, ());
289289
}
290290

291-
impl<St> FlattenUnorderedProj<'_, St, St::Item>
291+
impl<St> FlattenUnorderedProj<'_, St>
292292
where
293293
St: Stream,
294294
{
@@ -298,7 +298,7 @@ where
298298
}
299299
}
300300

301-
impl<St> FusedStream for FlattenUnordered<St, St::Item>
301+
impl<St> FusedStream for FlattenUnordered<St>
302302
where
303303
St: FusedStream,
304304
St::Item: FusedStream + Unpin,
@@ -309,7 +309,7 @@ where
309309
}
310310
}
311311

312-
impl<St> Stream for FlattenUnordered<St, St::Item>
312+
impl<St> Stream for FlattenUnordered<St>
313313
where
314314
St: Stream,
315315
St::Item: Stream + Unpin,
@@ -335,7 +335,7 @@ where
335335
// Safety: now state is `POLLING`.
336336
let stream_waker = unsafe { InnerWaker::replace_waker(this.stream_waker, cx) };
337337

338-
// Here we need to poll the inner stream.
338+
// Here we need to poll the base stream.
339339
//
340340
// To improve performance, we will attempt to place as many items as we can
341341
// to the `FuturesUnordered` bucket before polling inner streams
@@ -420,12 +420,12 @@ where
420420

421421
// Forwarding impl of Sink from the underlying stream
422422
#[cfg(feature = "sink")]
423-
impl<S, Item> Sink<Item> for FlattenUnordered<S, S::Item>
423+
impl<St, Item> Sink<Item> for FlattenUnordered<St>
424424
where
425-
S: Stream + Sink<Item>,
426-
S::Item: Stream,
425+
St: Stream + Sink<Item>,
426+
St::Item: Stream,
427427
{
428-
type Error = S::Error;
428+
type Error = St::Error;
429429

430430
delegate_sink!(stream, Item);
431431
}

futures-util/src/stream/stream/mod.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -205,13 +205,8 @@ mod flatten_unordered;
205205

206206
#[cfg(not(futures_no_atomic_cas))]
207207
#[cfg(feature = "alloc")]
208-
delegate_all!(
209-
/// Stream for the [`flatten_unordered`](StreamExt::flatten_unordered) method.
210-
FlattenUnordered<St>(
211-
flatten_unordered::FlattenUnordered<St, St::Item>
212-
): Debug + Sink + Stream + FusedStream + AccessInner[St, (.)] + New[|x: St, limit: Option<usize>| flatten_unordered::FlattenUnordered::new(x, limit)]
213-
where St: Stream, St::Item: Stream, St::Item: Unpin
214-
);
208+
#[allow(unreachable_pub)]
209+
pub use self::flatten_unordered::FlattenUnordered;
215210

216211
#[cfg(not(futures_no_atomic_cas))]
217212
#[cfg(feature = "alloc")]

futures/tests/stream.rs

Lines changed: 84 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -147,100 +147,112 @@ fn flatten_unordered() {
147147
}
148148

149149
// basic behaviour
150-
block_on(async {
151-
let st =
152-
stream::iter(vec![stream::iter(0..=4u8), stream::iter(6..=10), stream::iter(10..=12)]);
150+
{
151+
block_on(async {
152+
let st = stream::iter(vec![
153+
stream::iter(0..=4u8),
154+
stream::iter(6..=10),
155+
stream::iter(10..=12),
156+
]);
153157

154-
let fl_unordered = st.flatten_unordered(3).collect::<Vec<_>>().await;
158+
let fl_unordered = st.flatten_unordered(3).collect::<Vec<_>>().await;
155159

156-
assert_eq!(fl_unordered, vec![0, 6, 10, 1, 7, 11, 2, 8, 12, 3, 9, 4, 10]);
157-
});
160+
assert_eq!(fl_unordered, vec![0, 6, 10, 1, 7, 11, 2, 8, 12, 3, 9, 4, 10]);
161+
});
158162

159-
block_on(async {
160-
let st =
161-
stream::iter(vec![stream::iter(0..=4u8), stream::iter(6..=10), stream::iter(0..=2)]);
163+
block_on(async {
164+
let st = stream::iter(vec![
165+
stream::iter(0..=4u8),
166+
stream::iter(6..=10),
167+
stream::iter(0..=2),
168+
]);
162169

163-
let mut fm_unordered = st
164-
.flat_map_unordered(1, |s| s.filter(|v| futures::future::ready(v % 2 == 0)))
165-
.collect::<Vec<_>>()
166-
.await;
170+
let mut fm_unordered = st
171+
.flat_map_unordered(1, |s| s.filter(|v| futures::future::ready(v % 2 == 0)))
172+
.collect::<Vec<_>>()
173+
.await;
167174

168-
fm_unordered.sort_unstable();
175+
fm_unordered.sort_unstable();
169176

170-
assert_eq!(fm_unordered, vec![0, 0, 2, 2, 4, 6, 8, 10]);
171-
});
177+
assert_eq!(fm_unordered, vec![0, 0, 2, 2, 4, 6, 8, 10]);
178+
});
179+
}
172180

173-
// wake up immmediately
174-
block_on(async {
175-
let mut fl_unordered = Interchanger { polled: false, base: 0, wake_immediately: true }
176-
.take(10)
177-
.map(|s| s.map(identity))
178-
.flatten_unordered(10)
179-
.collect::<Vec<_>>()
180-
.await;
181+
// wake up immediately
182+
{
183+
block_on(async {
184+
let mut fl_unordered = Interchanger { polled: false, base: 0, wake_immediately: true }
185+
.take(10)
186+
.map(|s| s.map(identity))
187+
.flatten_unordered(10)
188+
.collect::<Vec<_>>()
189+
.await;
181190

182-
fl_unordered.sort_unstable();
191+
fl_unordered.sort_unstable();
183192

184-
assert_eq!(fl_unordered, (0..60).collect::<Vec<u8>>());
185-
});
193+
assert_eq!(fl_unordered, (0..60).collect::<Vec<u8>>());
194+
});
186195

187-
block_on(async {
188-
let mut fm_unordered = Interchanger { polled: false, base: 0, wake_immediately: true }
189-
.take(10)
190-
.flat_map_unordered(10, |s| s.map(identity))
191-
.collect::<Vec<_>>()
192-
.await;
196+
block_on(async {
197+
let mut fm_unordered = Interchanger { polled: false, base: 0, wake_immediately: true }
198+
.take(10)
199+
.flat_map_unordered(10, |s| s.map(identity))
200+
.collect::<Vec<_>>()
201+
.await;
193202

194-
fm_unordered.sort_unstable();
203+
fm_unordered.sort_unstable();
195204

196-
assert_eq!(fm_unordered, (0..60).collect::<Vec<u8>>());
197-
});
205+
assert_eq!(fm_unordered, (0..60).collect::<Vec<u8>>());
206+
});
207+
}
198208

199209
// wake up after delay
200-
block_on(async {
201-
let mut fl_unordered = Interchanger { polled: false, base: 0, wake_immediately: false }
202-
.take(10)
203-
.map(|s| s.map(identity))
204-
.flatten_unordered(10)
205-
.collect::<Vec<_>>()
206-
.await;
207-
208-
fl_unordered.sort_unstable();
209-
210-
assert_eq!(fl_unordered, (0..60).collect::<Vec<u8>>());
211-
});
212-
213-
block_on(async {
214-
let mut fm_unordered = Interchanger { polled: false, base: 0, wake_immediately: false }
215-
.take(10)
216-
.flat_map_unordered(10, |s| s.map(identity))
217-
.collect::<Vec<_>>()
218-
.await;
210+
{
211+
block_on(async {
212+
let mut fl_unordered = Interchanger { polled: false, base: 0, wake_immediately: false }
213+
.take(10)
214+
.map(|s| s.map(identity))
215+
.flatten_unordered(10)
216+
.collect::<Vec<_>>()
217+
.await;
219218

220-
fm_unordered.sort_unstable();
219+
fl_unordered.sort_unstable();
221220

222-
assert_eq!(fm_unordered, (0..60).collect::<Vec<u8>>());
223-
});
221+
assert_eq!(fl_unordered, (0..60).collect::<Vec<u8>>());
222+
});
224223

225-
block_on(async {
226-
let (mut fm_unordered, mut fl_unordered) = futures_util::join!(
227-
Interchanger { polled: false, base: 0, wake_immediately: false }
224+
block_on(async {
225+
let mut fm_unordered = Interchanger { polled: false, base: 0, wake_immediately: false }
228226
.take(10)
229227
.flat_map_unordered(10, |s| s.map(identity))
230-
.collect::<Vec<_>>(),
231-
Interchanger { polled: false, base: 0, wake_immediately: false }
232-
.take(10)
233-
.map(|s| s.map(identity))
234-
.flatten_unordered(10)
235228
.collect::<Vec<_>>()
236-
);
229+
.await;
237230

238-
fm_unordered.sort_unstable();
239-
fl_unordered.sort_unstable();
231+
fm_unordered.sort_unstable();
240232

241-
assert_eq!(fm_unordered, fl_unordered);
242-
assert_eq!(fm_unordered, (0..60).collect::<Vec<u8>>());
243-
});
233+
assert_eq!(fm_unordered, (0..60).collect::<Vec<u8>>());
234+
});
235+
236+
block_on(async {
237+
let (mut fm_unordered, mut fl_unordered) = futures_util::join!(
238+
Interchanger { polled: false, base: 0, wake_immediately: false }
239+
.take(10)
240+
.flat_map_unordered(10, |s| s.map(identity))
241+
.collect::<Vec<_>>(),
242+
Interchanger { polled: false, base: 0, wake_immediately: false }
243+
.take(10)
244+
.map(|s| s.map(identity))
245+
.flatten_unordered(10)
246+
.collect::<Vec<_>>()
247+
);
248+
249+
fm_unordered.sort_unstable();
250+
fl_unordered.sort_unstable();
251+
252+
assert_eq!(fm_unordered, fl_unordered);
253+
assert_eq!(fm_unordered, (0..60).collect::<Vec<u8>>());
254+
});
255+
}
244256

245257
// waker panics
246258
{

0 commit comments

Comments
 (0)