Skip to content

Commit 61132e6

Browse files
committed
Implement FromIterator for FuturesOrdered
1 parent 5cbed65 commit 61132e6

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

src/stream/futures_ordered.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::cmp::{Eq, PartialEq, PartialOrd, Ord, Ordering};
22
use std::collections::BinaryHeap;
33
use std::fmt::{self, Debug};
4+
use std::iter::FromIterator;
45

56
use {Async, Future, IntoFuture, Poll, Stream};
67
use stream::FuturesUnordered;
@@ -198,3 +199,15 @@ impl<T: Debug> Debug for FuturesOrdered<T>
198199
write!(fmt, "FuturesOrdered {{ ... }}")
199200
}
200201
}
202+
203+
impl<F: Future> FromIterator<F> for FuturesOrdered<F> {
204+
fn from_iter<T>(iter: T) -> Self
205+
where T: IntoIterator<Item = F>
206+
{
207+
let mut new = FuturesOrdered::new();
208+
for future in iter.into_iter() {
209+
new.push(future);
210+
}
211+
new
212+
}
213+
}

tests/futures_ordered.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,20 @@ fn works_2() {
4848
assert!(spawn.poll_stream_notify(&support::notify_noop(), 0).unwrap().is_ready());
4949
}
5050

51+
#[test]
52+
fn from_iterator() {
53+
use futures::future::ok;
54+
use futures::stream::FuturesOrdered;
55+
56+
let stream = vec![
57+
ok::<u32, ()>(1),
58+
ok::<u32, ()>(2),
59+
ok::<u32, ()>(3)
60+
].into_iter().collect::<FuturesOrdered<_>>();
61+
assert_eq!(stream.len(), 3);
62+
assert_eq!(stream.collect().wait(), Ok(vec![1,2,3]));
63+
}
64+
5165
#[test]
5266
fn queue_never_unblocked() {
5367
let (_a_tx, a_rx) = oneshot::channel::<Box<Any+Send>>();

0 commit comments

Comments
 (0)