@@ -4,13 +4,39 @@ extern crate futures;
4
4
use futures:: { Async , Future , Poll , Sink , Stream } ;
5
5
use futures:: executor;
6
6
use futures:: future:: { err, ok} ;
7
- use futures:: stream:: { empty, iter , poll_fn, Peekable } ;
7
+ use futures:: stream:: { empty, iter_ok , poll_fn, Peekable } ;
8
8
use futures:: sync:: oneshot;
9
9
use futures:: sync:: mpsc;
10
10
11
11
mod support;
12
12
use support:: * ;
13
13
14
+ pub struct Iter < I > {
15
+ iter : I ,
16
+ }
17
+
18
+ pub fn iter < J , T , E > ( i : J ) -> Iter < J :: IntoIter >
19
+ where J : IntoIterator < Item =Result < T , E > > ,
20
+ {
21
+ Iter {
22
+ iter : i. into_iter ( ) ,
23
+ }
24
+ }
25
+
26
+ impl < I , T , E > Stream for Iter < I >
27
+ where I : Iterator < Item =Result < T , E > > ,
28
+ {
29
+ type Item = T ;
30
+ type Error = E ;
31
+
32
+ fn poll ( & mut self ) -> Poll < Option < T > , E > {
33
+ match self . iter . next ( ) {
34
+ Some ( Ok ( e) ) => Ok ( Async :: Ready ( Some ( e) ) ) ,
35
+ Some ( Err ( e) ) => Err ( e) ,
36
+ None => Ok ( Async :: Ready ( None ) ) ,
37
+ }
38
+ }
39
+ }
14
40
15
41
fn list ( ) -> Box < Stream < Item =i32 , Error =u32 > + Send > {
16
42
let ( tx, rx) = mpsc:: channel ( 1 ) ;
@@ -310,44 +336,45 @@ fn chunks_panic_on_cap_zero() {
310
336
311
337
#[ test]
312
338
fn select ( ) {
313
- let a = iter ( vec ! [ Ok :: <_, u32 >( 1 ) , Ok ( 2 ) , Ok ( 3 ) ] ) ;
314
- let b = iter ( vec ! [ Ok ( 4 ) , Ok ( 5 ) , Ok ( 6 ) ] ) ;
339
+ let a = iter_ok :: < _ , u32 > ( vec ! [ 1 , 2 , 3 ] ) ;
340
+ let b = iter_ok ( vec ! [ 4 , 5 , 6 ] ) ;
315
341
assert_done ( || a. select ( b) . collect ( ) , Ok ( vec ! [ 1 , 4 , 2 , 5 , 3 , 6 ] ) ) ;
316
342
317
- let a = iter ( vec ! [ Ok :: <_, u32 >( 1 ) , Ok ( 2 ) , Ok ( 3 ) ] ) ;
318
- let b = iter ( vec ! [ Ok ( 1 ) , Ok ( 2 ) ] ) ;
343
+ let a = iter_ok :: < _ , u32 > ( vec ! [ 1 , 2 , 3 ] ) ;
344
+ let b = iter_ok ( vec ! [ 1 , 2 ] ) ;
319
345
assert_done ( || a. select ( b) . collect ( ) , Ok ( vec ! [ 1 , 1 , 2 , 2 , 3 ] ) ) ;
320
346
321
- let a = iter ( vec ! [ Ok ( 1 ) , Ok ( 2 ) ] ) ;
322
- let b = iter ( vec ! [ Ok :: <_, u32 >( 1 ) , Ok ( 2 ) , Ok ( 3 ) ] ) ;
347
+ let a = iter_ok ( vec ! [ 1 , 2 ] ) ;
348
+ let b = iter_ok :: < _ , u32 > ( vec ! [ 1 , 2 , 3 ] ) ;
323
349
assert_done ( || a. select ( b) . collect ( ) , Ok ( vec ! [ 1 , 1 , 2 , 2 , 3 ] ) ) ;
324
350
}
325
351
326
352
#[ test]
327
353
fn forward ( ) {
328
354
let v = Vec :: new ( ) ;
329
- let v = iter ( vec ! [ Ok :: <_, ( ) >( 0 ) , Ok ( 1 ) ] ) . forward ( v) . wait ( ) . unwrap ( ) . 1 ;
355
+ let v = iter_ok :: < _ , ( ) > ( vec ! [ 0 , 1 ] ) . forward ( v) . wait ( ) . unwrap ( ) . 1 ;
330
356
assert_eq ! ( v, vec![ 0 , 1 ] ) ;
331
357
332
- let v = iter ( vec ! [ Ok :: <_, ( ) >( 2 ) , Ok ( 3 ) ] ) . forward ( v) . wait ( ) . unwrap ( ) . 1 ;
358
+ let v = iter_ok :: < _ , ( ) > ( vec ! [ 2 , 3 ] ) . forward ( v) . wait ( ) . unwrap ( ) . 1 ;
333
359
assert_eq ! ( v, vec![ 0 , 1 , 2 , 3 ] ) ;
334
360
335
- assert_done ( move || iter ( vec ! [ Ok ( 4 ) , Ok ( 5 ) ] ) . forward ( v) . map ( |( _, s) | s) ,
361
+ assert_done ( move || iter_ok ( vec ! [ 4 , 5 ] ) . forward ( v) . map ( |( _, s) | s) ,
336
362
Ok :: < _ , ( ) > ( vec ! [ 0 , 1 , 2 , 3 , 4 , 5 ] ) ) ;
337
363
}
338
364
339
365
#[ test]
366
+ #[ allow( deprecated) ]
340
367
fn concat ( ) {
341
- let a = iter ( vec ! [ Ok :: <_, ( ) >( vec![ 1 , 2 , 3 ] ) , Ok ( vec![ 4 , 5 , 6 ] ) , Ok ( vec![ 7 , 8 , 9 ] ) ] ) ;
342
- assert_done ( move || a. concat2 ( ) , Ok ( vec ! [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] ) ) ;
368
+ let a = iter_ok :: < _ , ( ) > ( vec ! [ vec! [ 1 , 2 , 3 ] , vec![ 4 , 5 , 6 ] , vec![ 7 , 8 , 9 ] ] ) ;
369
+ assert_done ( move || a. concat ( ) , Ok ( vec ! [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] ) ) ;
343
370
344
371
let b = iter ( vec ! [ Ok :: <_, ( ) >( vec![ 1 , 2 , 3 ] ) , Err ( ( ) ) , Ok ( vec![ 7 , 8 , 9 ] ) ] ) ;
345
- assert_done ( move || b. concat2 ( ) , Err ( ( ) ) ) ;
372
+ assert_done ( move || b. concat ( ) , Err ( ( ) ) ) ;
346
373
}
347
374
348
375
#[ test]
349
376
fn concat2 ( ) {
350
- let a = iter ( vec ! [ Ok :: <_, ( ) >( vec![ 1 , 2 , 3 ] ) , Ok ( vec![ 4 , 5 , 6 ] ) , Ok ( vec![ 7 , 8 , 9 ] ) ] ) ;
377
+ let a = iter_ok :: < _ , ( ) > ( vec ! [ vec! [ 1 , 2 , 3 ] , vec![ 4 , 5 , 6 ] , vec![ 7 , 8 , 9 ] ] ) ;
351
378
assert_done ( move || a. concat2 ( ) , Ok ( vec ! [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] ) ) ;
352
379
353
380
let b = iter ( vec ! [ Ok :: <_, ( ) >( vec![ 1 , 2 , 3 ] ) , Err ( ( ) ) , Ok ( vec![ 7 , 8 , 9 ] ) ] ) ;
0 commit comments