Crates.io | also_sync |
lib.rs | also_sync |
version | 0.1.0 |
source | src |
created_at | 2024-02-20 12:17:06.401622 |
updated_at | 2024-02-20 12:17:06.401622 |
description | Macros to automatically wrap async functions as sync |
homepage | |
repository | https://github.com/julianbuettner/also-sync |
max_upload_size | |
id | 1146300 |
size | 48,225 |
This library provides a macro to automatically derive a
*_sync
version from your async functions. It does so
by having a global tokio runtime with all features
on all cores.
This allows a async-first library development while supporting sync.
Take a look at the following piece of code:
use also_sync::also_sync;
struct Struct;
impl Struct {
#[also_sync]
pub async fn foo(&self, a: i32) -> i32 {
42 * a
}
}
This is literally just converted to
struct Struct;
impl Struct {
pub async fn foo(&self, a: i32) -> i32 {
42
}
pub fn foo_sync(&self: a: i32) -> i32 {
let handle = also_sync::TOKIO_RUNTIME.handle();
handle.block_on(async move { self.foo(a).await })
}
}
Of course if works for simple functions as well.