susync-macros 0.1.0

A proc macro crate for susync crate.
Documentation
  • Coverage
  • 100%
    2 out of 2 items documented0 out of 1 items with examples
  • Size
  • Source code size: 7.07 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 281.96 kB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 4s Average build duration of successful builds.
  • all releases: 4s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • tcerqueira/susync
    5 1 1
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • tcerqueira

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.