RustでFuture03からFuture01にしてStream01に変換する

future03でへいよーって書いているけど、ライブラリが最終的にfuture01のstreamを欲しがっているシーンに対応

#![allow(stable_features)]
#![feature(async_await, async_closure)]

use futures::prelude::*;
use futures01::Future as Future01;
use futures01::Stream as Stream01;
use std::result::Result;

#[runtime::main(runtime_tokio::Tokio)]
async fn main() -> Result<(), ()> {

    let stream = (async || -> Result<Vec<u8>, ()> {
        Ok(vec![1, 2, 3])
    })()
    .boxed()
    .compat()
    .map(|vec| {
        futures01::stream::iter_ok(vec)
    })
    .flatten_stream();

    let mut iter = stream.wait();
    assert_eq!(Ok(1), iter.next().unwrap());
    assert_eq!(Ok(2), iter.next().unwrap());
    assert_eq!(Ok(3), iter.next().unwrap());
    assert_eq!(None, iter.next());

    Ok(())
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA