Expand description
§Also Sync
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.
§How does it work?
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.
Structs§
- This is the global tokio runtime in which all
*_sync
functions are executed.
Attribute Macros§
- The main macro converting a
async fn x
into a syncfn x_sync()
. It is currently highly experimental, so test it before using it.