]>
git.proxmox.com Git - rustc.git/blob - vendor/futures/tests/future_try_flatten_stream.rs
1 use futures
::executor
::block_on_stream
;
2 use futures
::future
::{err, ok, TryFutureExt}
;
3 use futures
::sink
::Sink
;
4 use futures
::stream
::Stream
;
5 use futures
::stream
::{self, StreamExt}
;
6 use futures
::task
::{Context, Poll}
;
7 use std
::marker
::PhantomData
;
11 fn successful_future() {
12 let stream_items
= vec
![17, 19];
13 let future_of_a_stream
= ok
::<_
, bool
>(stream
::iter(stream_items
).map(Ok
));
15 let stream
= future_of_a_stream
.try_flatten_stream();
17 let mut iter
= block_on_stream(stream
);
18 assert_eq
!(Ok(17), iter
.next().unwrap());
19 assert_eq
!(Ok(19), iter
.next().unwrap());
20 assert_eq
!(None
, iter
.next());
25 struct PanickingStream
<T
, E
> {
26 _marker
: PhantomData
<(T
, E
)>,
29 impl<T
, E
> Stream
for PanickingStream
<T
, E
> {
30 type Item
= Result
<T
, E
>;
32 fn poll_next(self: Pin
<&mut Self>, _
: &mut Context
<'_
>) -> Poll
<Option
<Self::Item
>> {
37 let future_of_a_stream
= err
::<PanickingStream
<bool
, u32>, _
>(10);
38 let stream
= future_of_a_stream
.try_flatten_stream();
39 let mut iter
= block_on_stream(stream
);
40 assert_eq
!(Err(10), iter
.next().unwrap());
41 assert_eq
!(None
, iter
.next());
46 struct StreamSink
<T
, E
, Item
>(PhantomData
<(T
, E
, Item
)>);
48 impl<T
, E
, Item
> Stream
for StreamSink
<T
, E
, Item
> {
49 type Item
= Result
<T
, E
>;
50 fn poll_next(self: Pin
<&mut Self>, _
: &mut Context
<'_
>) -> Poll
<Option
<Self::Item
>> {
55 impl<T
, E
, Item
> Sink
<Item
> for StreamSink
<T
, E
, Item
> {
57 fn poll_ready(self: Pin
<&mut Self>, _
: &mut Context
<'_
>) -> Poll
<Result
<(), Self::Error
>> {
60 fn start_send(self: Pin
<&mut Self>, _
: Item
) -> Result
<(), Self::Error
> {
63 fn poll_flush(self: Pin
<&mut Self>, _
: &mut Context
<'_
>) -> Poll
<Result
<(), Self::Error
>> {
66 fn poll_close(self: Pin
<&mut Self>, _
: &mut Context
<'_
>) -> Poll
<Result
<(), Self::Error
>> {
71 fn assert_stream
<S
: Stream
>(_
: &S
) {}
72 fn assert_sink
<S
: Sink
<Item
>, Item
>(_
: &S
) {}
73 fn assert_stream_sink
<S
: Stream
+ Sink
<Item
>, Item
>(_
: &S
) {}
75 let s
= ok(StreamSink
::<(), (), ()>(PhantomData
)).try_flatten_stream();
78 assert_stream_sink(&s
);
79 let s
= ok(StreamSink
::<(), (), ()>(PhantomData
)).flatten_sink();
82 assert_stream_sink(&s
);