RustでFuture 0.3からFuture 0.1にしてStream 0.1に変換する

来るfuture 0.3で書いているけど、ライブラリが最終的に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(())
}

asyncの段階でOkを返すのは、compatによってFuture 0.1に変換する際に必要になるからです。おそらくFuture 0.3が主流になったら不要になるのでは。(Future 0.1にする必要がないので。)

コメントを残す

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

CAPTCHA