#future #v0 #compatibility #compat #version #layer #different

futures-compat

A compatibility layer between different versions of Future

2 releases

Uses old Rust 2015

0.0.1 May 2, 2018
0.0.0 Apr 6, 2018

#9 in #compat

MIT license

19KB
447 lines

futures-compat

This is a compatibility shim between [futures][] v0.1 and v0.2. It provides implementations that allow a type that implements Future from v0.1 to act as a Future from v0.2, and vice-versa.

Note: Task-local data doesn't really work, and getting it to work would require horrid unsafe hackery. It could probably be done if there was enough demand.

Example

Using a v0.1 Future as v0.2

extern crate futures_compat;
use futures_compat::futures_01::FutureInto02;

let futv01 = some_lib_that_hasnt_upgraded();

let futv02 = futv01.into_02_compat()
    .map(|val| {
        println!("map from v0.2! {:?}", val);
        Ok(())
    });

// spawn in a futures 0.2 executor

Using a v0.2 Future as v0.1

extern crate futures_compat;
use futures_compat::futures_01::FutureInto01;

let futv02 = some_lib_using_the_new_hotness();
let exec = get_my_current_executor();

let futv01 = futv02.into_01_compat(exec)
    .map(|val| {
        println!("map from v0.1! {:?}", val);
        Ok(())
    });

// spawn in a futures 0.1 executor
futv01.wait().unwrap();

Dependencies

~665KB
~11K SLoC