Make the blockchain interface async again on wasm32-unknown-unknown

The procedural macro `#[maybe_async]` makes a method or every method of a trait
"async" whenever the target_arch is `wasm32`, and leaves them untouched on
every other platform.

The macro `maybe_await!($e:expr)` can be used to call `maybe_async` methods on
multi-platform code: it expands to `$e` on non-wasm32 platforms and to
`$e.await` on wasm32.

The macro `await_or_block!($e:expr)` can be used to contain async code as much
as possible: it expands to `tokio::runtime::Runtime::new().unwrap().block_on($e)`
on non-wasm32 platforms, and to `$e.await` on wasm32.
This commit is contained in:
Alekos Filini
2020-07-20 15:51:57 +02:00
parent 4a51d50e1f
commit 4fcf7ac89e
10 changed files with 254 additions and 85 deletions

View File

@@ -5,6 +5,12 @@ extern crate serde;
#[macro_use]
extern crate serde_json;
#[cfg(target_arch = "wasm32")]
#[macro_use]
extern crate async_trait;
#[macro_use]
extern crate magical_macros;
#[cfg(test)]
#[macro_use]
extern crate lazy_static;