@@ -6,15 +6,12 @@ use core::mem;
6
6
use core:: pin:: Pin ;
7
7
use futures_core:: future:: { Future , TryFuture } ;
8
8
use futures_core:: task:: { Context , Poll } ;
9
- use rand:: prelude:: SliceRandom ;
10
- use rand:: rngs:: SmallRng ;
11
9
12
10
/// Future for the [`select_ok`] function.
13
11
#[ derive( Debug ) ]
14
12
#[ must_use = "futures do nothing unless you `.await` or poll them" ]
15
13
pub struct SelectOk < Fut > {
16
14
inner : Vec < Fut > ,
17
- rng : SmallRng ,
18
15
}
19
16
20
17
impl < Fut : Unpin > Unpin for SelectOk < Fut > { }
48
45
I : IntoIterator ,
49
46
I :: Item : TryFuture + Unpin ,
50
47
{
51
- let ret = SelectOk { inner : iter. into_iter ( ) . collect ( ) , rng : crate :: gen_rng ( ) } ;
48
+ let ret = SelectOk { inner : iter. into_iter ( ) . collect ( ) } ;
52
49
assert ! ( !ret. inner. is_empty( ) , "iterator provided to select_ok was empty" ) ;
53
50
assert_future :: <
54
51
Result < ( <I :: Item as TryFuture >:: Ok , Vec < I :: Item > ) , <I :: Item as TryFuture >:: Error > ,
@@ -60,8 +57,9 @@ impl<Fut: TryFuture + Unpin> Future for SelectOk<Fut> {
60
57
type Output = Result < ( Fut :: Ok , Vec < Fut > ) , Fut :: Error > ;
61
58
62
59
fn poll ( mut self : Pin < & mut Self > , cx : & mut Context < ' _ > ) -> Poll < Self :: Output > {
63
- let Self { inner, rng } = & mut * self ;
64
- inner. shuffle ( rng) ;
60
+ let Self { inner } = & mut * self ;
61
+ #[ cfg( feature = "std" ) ]
62
+ crate :: shuffle ( inner) ;
65
63
// loop until we've either exhausted all errors, a success was hit, or nothing is ready
66
64
loop {
67
65
let item = inner. iter_mut ( ) . enumerate ( ) . find_map ( |( i, f) | match f. try_poll_unpin ( cx) {
@@ -74,7 +72,7 @@ impl<Fut: TryFuture + Unpin> Future for SelectOk<Fut> {
74
72
drop ( inner. remove ( idx) ) ;
75
73
match res {
76
74
Ok ( e) => {
77
- let rest = mem:: take ( & mut self . inner ) ;
75
+ let rest = mem:: take ( inner) ;
78
76
return Poll :: Ready ( Ok ( ( e, rest) ) ) ;
79
77
}
80
78
Err ( e) => {
0 commit comments