Extension traits for dealing with optional futures and streams.
```rust
use futures::{future::{self, FusedFuture as }}; use futuresoption::OptionExt as _;
futures::executor::blockon(async {
let mut f = Some(future::ready::
This is useful when you want to implement optional branches using the
select!
macro.
```rust
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);
}); ```