4 releases
0.2.0 | Feb 18, 2024 |
---|---|
0.1.2 | Dec 28, 2023 |
0.1.1 | Dec 26, 2023 |
0.1.0 | Dec 26, 2023 |
#775 in Asynchronous
21KB
289 lines
Overview
An util crate to complete futures through a handle. Its main purpose is to bridge async Rust and callback-based APIs.
Inspired on the future_handles
crate.
The susync
crate uses standard library channels under the hood. It uses thread-safe primitives but expects low contention,
so it uses a single SpinMutex
for shared state.
By design handles are allowed to race to complete the future so it is ok to call complete
on handle of a completed future.
Examples
Channel-like API:
async fn func() -> Option<u32> {
let (future, handle) = susync::create();
func_with_callback(|res| {
handle.complete(res);
});
future.await.ok()
}
Scoped API:
async fn func() -> Option<u32> {
let future = susync::suspend(|handle| {
func_with_callback(|res| {
handle.complete(res);
});
});
future.await.ok()
}
Macro:
async fn func() -> Option<u32> {
sus!(func_with_callback(|res| {})).await.ok()
}
Docs
Full documentation here.
Dependencies
~0.4–0.9MB
~19K SLoC