Module drone_core::async [] [src]

Async/await syntax.

use drone_core::sync::spsc::oneshot;
use futures::executor;

fn plus_one(
  rx: oneshot::Receiver<usize, !>,
) -> impl Future<Item = usize, Error = oneshot::RecvError<!>> {
  AsyncFuture::new(|| {
    let number = await!(rx)?;
    Ok(number + 1)
  })
}

fn main() {
  let (tx, rx) = oneshot::channel::<usize, !>();
  let mut executor = executor::spawn(plus_one(rx));
  assert_eq!(tx.send(Ok(1)), Ok(()));
  assert_eq!(
    executor.poll_future_notify(&NOTIFY_NOP, 0),
    Ok(Async::Ready(2))
  );
}
use drone_core::sync::spsc::ring;
use futures::executor;

fn sum(
  rx: ring::Receiver<usize, !>,
) -> impl Future<Item = usize, Error = !> {
  AsyncFuture::new(|| {
    let mut sum = 0;
    await_for!(number in rx; {
      sum += number;
    });
    Ok(sum)
  })
}

fn main() {
  let (mut tx, rx) = ring::channel::<usize, !>(8);
  let mut executor = executor::spawn(sum(rx));
  assert_eq!(tx.send_overwrite(3), Ok(()));
  assert_eq!(tx.send_overwrite(4), Ok(()));
  assert_eq!(tx.send_overwrite(5), Ok(()));
  drop(tx);
  assert_eq!(
    executor.poll_future_notify(&NOTIFY_NOP, 0),
    Ok(Async::Ready(12))
  );
}

Structs

AsyncFuture

A generator-based future.