| Crates.io | also_sync |
| lib.rs | also_sync |
| version | 0.1.0 |
| created_at | 2024-02-20 12:17:06.401622+00 |
| updated_at | 2024-02-20 12:17:06.401622+00 |
| 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.