Crate completion[][src]

Utilities for writing completion-based asynchronous code.

A completion future is a future that must be run to completion, unlike regular futures which can be dropped and stopped at any time without the future’s knowledge. This allows for more flexibility for the implementer of the future and allows APIs like io_uring and IOCP to be wrapped in a zero-cost way.

This is based off this RFC by Matthias247.



pub use completion_core::CompletionFuture;
pub use completion_core::CompletionStream;
pub use self::future::BoxCompletionFuture;
pub use self::future::LocalBoxCompletionFuture;
pub use self::future::CompletionFutureExt;
pub use self::future::FutureExt;
pub use self::stream::BoxCompletionStream;
pub use self::stream::LocalBoxCompletionStream;
pub use self::stream::CompletionStreamExt;
pub use self::stream::StreamExt;



Utilities for the CompletionFuture trait.


Utilities for programming with asynchronous I/O.


Utilities for the CompletionStream trait.


completion_asyncmacro and std

A bang macro to generate completion async blocks.

completion_async_movemacro and std

A bang macro to generate completion async move blocks.

completion_streammacro and std

A bang macro to generate completion async streams.



Helper type to implement CompletionFuture or CompletionStream for a type that only implements Future or Stream.


Unsafely assert that the inner future or stream will complete.


Make sure that a future or stream will complete, created by CompletionFutureExt::must_complete and CompletionStreamExt::must_complete.

Attribute Macros

completionmacro and std

An attribute macro to generate completion async fns. These async functions evaluate to a CompletionFuture, and you can .await other CompletionFutures inside of them.