#future #async-await #async #complete #await #completablefuture

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

#1171 in Asynchronous

Download history 36771/week @ 2024-07-22 33465/week @ 2024-07-29 8615/week @ 2024-08-05 5664/week @ 2024-08-12 11059/week @ 2024-08-19 10843/week @ 2024-08-26 11721/week @ 2024-09-02 13448/week @ 2024-09-09 10949/week @ 2024-09-16 6467/week @ 2024-09-23 16301/week @ 2024-09-30 10050/week @ 2024-10-07 10101/week @ 2024-10-14 12697/week @ 2024-10-21 10042/week @ 2024-10-28 14380/week @ 2024-11-04

47,825 downloads per month
Used in 26 crates (5 directly)

MIT license

8KB
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:

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:

assert_eq!(block_on(ManualFuture::new_completed(10)), 10);

Dependencies

~1MB
~15K SLoC