Sha256: 074e9c9b51b6f7ea83d77347b5a0c8d414ca32b90445fec9b85f7f4cd2a6049f

Contents?: true

Size: 1.7 KB

Versions: 27

Compression:

Stored size: 1.7 KB

Contents

use futures::executor::block_on;
use futures::sink::{Sink, SinkExt};
use futures::stream::{self, Stream, StreamExt};
use futures::task::{Context, Poll};
use pin_project::pin_project;
use std::pin::Pin;

#[test]
fn test_split() {
    #[pin_project]
    struct Join<T, U> {
        #[pin]
        stream: T,
        #[pin]
        sink: U,
    }

    impl<T: Stream, U> Stream for Join<T, U> {
        type Item = T::Item;

        fn poll_next(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<T::Item>> {
            self.project().stream.poll_next(cx)
        }
    }

    impl<T, U: Sink<Item>, Item> Sink<Item> for Join<T, U> {
        type Error = U::Error;

        fn poll_ready(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
            self.project().sink.poll_ready(cx)
        }

        fn start_send(self: Pin<&mut Self>, item: Item) -> Result<(), Self::Error> {
            self.project().sink.start_send(item)
        }

        fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
            self.project().sink.poll_flush(cx)
        }

        fn poll_close(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
            self.project().sink.poll_close(cx)
        }
    }

    let mut dest: Vec<i32> = Vec::new();
    {
        let join = Join { stream: stream::iter(vec![10, 20, 30]), sink: &mut dest };

        let (sink, stream) = join.split();
        let join = sink.reunite(stream).expect("test_split: reunite error");
        let (mut sink, stream) = join.split();
        let mut stream = stream.map(Ok);
        block_on(sink.send_all(&mut stream)).unwrap();
    }
    assert_eq!(dest, vec![10, 20, 30]);
}

Version data entries

27 entries across 27 versions & 1 rubygems

Version Path
wasmtime-30.0.2 ./ext/cargo-vendor/futures-0.3.31/tests/stream_split.rs
wasmtime-29.0.0 ./ext/cargo-vendor/futures-0.3.31/tests/stream_split.rs
wasmtime-28.0.0 ./ext/cargo-vendor/futures-0.3.31/tests/stream_split.rs
wasmtime-27.0.0 ./ext/cargo-vendor/futures-0.3.31/tests/stream_split.rs
wasmtime-26.0.0 ./ext/cargo-vendor/futures-0.3.31/tests/stream_split.rs
wasmtime-25.0.2 ./ext/cargo-vendor/futures-0.3.30/tests/stream_split.rs
wasmtime-25.0.1 ./ext/cargo-vendor/futures-0.3.30/tests/stream_split.rs
wasmtime-25.0.0 ./ext/cargo-vendor/futures-0.3.30/tests/stream_split.rs
wasmtime-24.0.0 ./ext/cargo-vendor/futures-0.3.30/tests/stream_split.rs
wasmtime-23.0.2 ./ext/cargo-vendor/futures-0.3.30/tests/stream_split.rs
wasmtime-22.0.0 ./ext/cargo-vendor/futures-0.3.30/tests/stream_split.rs
wasmtime-21.0.1 ./ext/cargo-vendor/futures-0.3.30/tests/stream_split.rs
wasmtime-20.0.2 ./ext/cargo-vendor/futures-0.3.30/tests/stream_split.rs
wasmtime-20.0.0 ./ext/cargo-vendor/futures-0.3.30/tests/stream_split.rs
wasmtime-18.0.3 ./ext/cargo-vendor/futures-0.3.30/tests/stream_split.rs
wasmtime-17.0.1 ./ext/cargo-vendor/futures-0.3.30/tests/stream_split.rs
wasmtime-17.0.0 ./ext/cargo-vendor/futures-0.3.30/tests/stream_split.rs
wasmtime-16.0.0 ./ext/cargo-vendor/futures-0.3.30/tests/stream_split.rs
wasmtime-15.0.1 ./ext/cargo-vendor/futures-0.3.30/tests/stream_split.rs
wasmtime-15.0.0 ./ext/cargo-vendor/futures-0.3.30/tests/stream_split.rs