Option Extensions for Futures

Build Status

Extension traits for dealing with optional futures and streams.

Examples

```rust use futures::{future::{self, FusedFuture as }}; use futuresoption::OptionExt as _;

futures::executor::blockon(async { let mut f = Some(future::ready::(1)); assert!(f.issome()); asserteq!(f.current().await, 1); assert!(f.isnone()); assert!(f.current().is_terminated()); }); ```

This is useful when you want to implement optional branches using the select! macro.

```rust

![recursion_limit="128"]

use futures::{future, stream, StreamExt as }; use futuresoption::OptionExt as _;

futures::executor::blockon(async { let mut value = None; let mut values = Some(stream::iter(vec![1u32, 2u32, 4u32].intoiter()).fuse()); let mut parked = None;

let mut sum = 0;

loop {
    futures::select! {
        value = value.current() => {
            sum += value;
            std::mem::swap(&mut parked, &mut values);
        }
        v = values.next() => {
            match v {
                Some(v) => {
                    value = Some(future::ready(v));
                    std::mem::swap(&mut parked, &mut values);
                },
                None => break,
            }
        }
    }
}

assert_eq!(7, sum);

}); ```