#async #await #future #completablefuture #complete

manual_future

A future that must be manually completed, similar to Java’s CompletableFuture

2 releases

0.1.1 Nov 27, 2019
0.1.0 Nov 23, 2019

#350 in Asynchronous


Used in vampire_api

MIT license

7KB
106 lines

manual_future

Explicitly completed Future type for Rust, similar to Java's CompletableFuture

Example

// create a new, incomplete ManualFuture
let (future, completer) = ManualFuture::new();

// complete the future with a value
completer.complete(5).await;

// retrieve the value from the future
assert_eq!(future.await, 5);

// you can also create ManualFuture instances that are already completed
assert_eq!(ManualFuture::new_completed(10).await, 10);

lib.rs:

A Future value that resolves once it's explicitly completed, potentially from a different thread or task, similar to Java's CompletableFuture.

Currently, this is implemented using the BiLock from the futures crate.

Examples

Create an incomplete ManualFuture and explicitly complete it with the completer:

# use manual_future::ManualFuture;
# use futures::executor::block_on;
let (future, completer) = ManualFuture::<i32>::new();
block_on(async { completer.complete(5).await });
assert_eq!(block_on(future), 5);

Create an initially complete ManualFuture that can be immediately resolved:

# use manual_future::ManualFuture;
# use futures::executor::block_on;
assert_eq!(block_on(ManualFuture::new_completed(10)), 10);

Dependencies

~1MB
~16K SLoC