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:
@@ -709,6 +709,7 @@ where
|
||||
B: OnlineBlockchain,
|
||||
D: BatchDatabase,
|
||||
{
|
||||
#[maybe_async]
|
||||
pub fn new(
|
||||
descriptor: &str,
|
||||
change_descriptor: Option<&str>,
|
||||
@@ -738,7 +739,7 @@ where
|
||||
None => None,
|
||||
};
|
||||
|
||||
let current_height = Some(client.get_height()? as u32);
|
||||
let current_height = Some(maybe_await!(client.get_height())? as u32);
|
||||
|
||||
Ok(Wallet {
|
||||
descriptor,
|
||||
@@ -752,6 +753,7 @@ where
|
||||
})
|
||||
}
|
||||
|
||||
#[maybe_async]
|
||||
pub fn sync(
|
||||
&self,
|
||||
max_address: Option<u32>,
|
||||
@@ -811,15 +813,16 @@ where
|
||||
self.database.borrow_mut().commit_batch(address_batch)?;
|
||||
}
|
||||
|
||||
self.client.borrow_mut().sync(
|
||||
maybe_await!(self.client.borrow_mut().sync(
|
||||
None,
|
||||
self.database.borrow_mut().deref_mut(),
|
||||
noop_progress(),
|
||||
)
|
||||
))
|
||||
}
|
||||
|
||||
#[maybe_async]
|
||||
pub fn broadcast(&self, tx: Transaction) -> Result<Txid, Error> {
|
||||
self.client.borrow_mut().broadcast(&tx)?;
|
||||
maybe_await!(self.client.borrow_mut().broadcast(&tx))?;
|
||||
|
||||
Ok(tx.txid())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user