Crate async_nng

Source
Expand description

§About

async-nng is a small wrapper that uses the async-channel crate alongside the nng crate to provide types that provide async-await semantics around send and receive operations on an NNG socket.

The futures that are constructed by the wrapper types in this crate directly utilize the nng::Aio framework, and do not use any spawn_blocking, unblock, or send any data to a backing threadpool in order to work. This makes it extremely useful to use in scenarios where the blocking crate or the tokio equivalent (spawn_blocking) are undesirable.

§Installing

$ cargo add async-nng

§Runtime Selection

This crate should work with any of tokio, async-std, or smol. The tests in this crate use smol purely to save on the number of dev-dependencies, but there are no types used within this crate itself that rely on spawning tasks or any executor-specific API.

§AsyncContext and AsyncSocket

The two primary types provided by this crate are AsyncContext and AsyncSocket. In almost all instances, one should prefer contexts to sockets when writing asynchronous and concurrent programs. See the documentation for AsyncContext for more information.

AsyncSocket is provided as well for those using raw-mode sockets or who otherwise cannot take advantage of contexts. Unlike contexts which borrow the underlying nng::Socket, AsyncSocket itself is an owning type and owns the socket. An AsyncSocket::into_inner is provided so that the original socket type can be recovered if there is an error or some other reason to get access to the underlying socket.

§Acknowledgements

Thanks to @neachdainn in the NNG discord (and maintainer of the nng crate) for helping me in constructing the MVP for async-await semantics wrapping the nng crate.

Structs§

AsyncContext
A wrapper type around Context to enable async-await send and receive operations.
AsyncSocket
A wrapper type around Socket to enable async-await send and receive operations.