Merge bitcoindevkit/bdk#831: Don't default to use async
/await
on wasm32
32912eaa05fd3bb4fa1577ca413dcedf909544d9 Don't default to use `async`/`await` on `wasm32` (Elias Rohrer) Pull request description: ### Description We don't automatically want to make the interface `async` based on the used architecture, but now require the user to explicitly set the `async-interface` feature. #### All Submissions: * [x] I've signed all my commits * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md) * [x] I ran `cargo fmt` and `cargo clippy` before committing ACKs for top commit: notmandatory: ACK 32912eaa05fd3bb4fa1577ca413dcedf909544d9 Tree-SHA512: 41a8f3ab29508a359a8c0d96994e4fa97e52c15e8b8003c1988bcfe036cafa81d6210d446ed825672ce52aff684ebb328dc61b8ae3d25cda6f51a3cae838de58
This commit is contained in:
commit
41dc7f7d0d
2
.github/workflows/cont_integration.yml
vendored
2
.github/workflows/cont_integration.yml
vendored
@ -154,7 +154,7 @@ jobs:
|
|||||||
- name: Update toolchain
|
- name: Update toolchain
|
||||||
run: rustup update
|
run: rustup update
|
||||||
- name: Check
|
- name: Check
|
||||||
run: cargo check --target wasm32-unknown-unknown --features use-esplora-async,dev-getrandom-wasm --no-default-features
|
run: cargo check --target wasm32-unknown-unknown --features async-interface,use-esplora-async,dev-getrandom-wasm --no-default-features
|
||||||
|
|
||||||
fmt:
|
fmt:
|
||||||
name: Rust fmt
|
name: Rust fmt
|
||||||
|
@ -19,7 +19,7 @@ use syn::{parse, ImplItemMethod, ItemImpl, ItemTrait, Token};
|
|||||||
|
|
||||||
fn add_async_trait(mut parsed: ItemTrait) -> TokenStream {
|
fn add_async_trait(mut parsed: ItemTrait) -> TokenStream {
|
||||||
let output = quote! {
|
let output = quote! {
|
||||||
#[cfg(all(not(target_arch = "wasm32"), not(feature = "async-interface")))]
|
#[cfg(not(feature = "async-interface"))]
|
||||||
#parsed
|
#parsed
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -32,7 +32,7 @@ fn add_async_trait(mut parsed: ItemTrait) -> TokenStream {
|
|||||||
let output = quote! {
|
let output = quote! {
|
||||||
#output
|
#output
|
||||||
|
|
||||||
#[cfg(any(target_arch = "wasm32", feature = "async-interface"))]
|
#[cfg(feature = "async-interface")]
|
||||||
#[async_trait(?Send)]
|
#[async_trait(?Send)]
|
||||||
#parsed
|
#parsed
|
||||||
};
|
};
|
||||||
@ -42,7 +42,7 @@ fn add_async_trait(mut parsed: ItemTrait) -> TokenStream {
|
|||||||
|
|
||||||
fn add_async_method(mut parsed: ImplItemMethod) -> TokenStream {
|
fn add_async_method(mut parsed: ImplItemMethod) -> TokenStream {
|
||||||
let output = quote! {
|
let output = quote! {
|
||||||
#[cfg(all(not(target_arch = "wasm32"), not(feature = "async-interface")))]
|
#[cfg(not(feature = "async-interface"))]
|
||||||
#parsed
|
#parsed
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ fn add_async_method(mut parsed: ImplItemMethod) -> TokenStream {
|
|||||||
let output = quote! {
|
let output = quote! {
|
||||||
#output
|
#output
|
||||||
|
|
||||||
#[cfg(any(target_arch = "wasm32", feature = "async-interface"))]
|
#[cfg(feature = "async-interface")]
|
||||||
#parsed
|
#parsed
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ fn add_async_method(mut parsed: ImplItemMethod) -> TokenStream {
|
|||||||
|
|
||||||
fn add_async_impl_trait(mut parsed: ItemImpl) -> TokenStream {
|
fn add_async_impl_trait(mut parsed: ItemImpl) -> TokenStream {
|
||||||
let output = quote! {
|
let output = quote! {
|
||||||
#[cfg(all(not(target_arch = "wasm32"), not(feature = "async-interface")))]
|
#[cfg(not(feature = "async-interface"))]
|
||||||
#parsed
|
#parsed
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -73,7 +73,7 @@ fn add_async_impl_trait(mut parsed: ItemImpl) -> TokenStream {
|
|||||||
let output = quote! {
|
let output = quote! {
|
||||||
#output
|
#output
|
||||||
|
|
||||||
#[cfg(any(target_arch = "wasm32", feature = "async-interface"))]
|
#[cfg(feature = "async-interface")]
|
||||||
#[async_trait(?Send)]
|
#[async_trait(?Send)]
|
||||||
#parsed
|
#parsed
|
||||||
};
|
};
|
||||||
@ -81,7 +81,7 @@ fn add_async_impl_trait(mut parsed: ItemImpl) -> TokenStream {
|
|||||||
output.into()
|
output.into()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Makes a method or every method of a trait "async" only if the target_arch is "wasm32"
|
/// Makes a method or every method of a trait `async`, if the `async-interface` feature is enabled.
|
||||||
///
|
///
|
||||||
/// Requires the `async-trait` crate as a dependency whenever this attribute is used on a trait
|
/// Requires the `async-trait` crate as a dependency whenever this attribute is used on a trait
|
||||||
/// definition or trait implementation.
|
/// definition or trait implementation.
|
||||||
@ -101,18 +101,18 @@ pub fn maybe_async(_attr: TokenStream, item: TokenStream) -> TokenStream {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Awaits if target_arch is "wasm32", does nothing otherwise
|
/// Awaits, if the `async-interface` feature is enabled.
|
||||||
#[proc_macro]
|
#[proc_macro]
|
||||||
pub fn maybe_await(expr: TokenStream) -> TokenStream {
|
pub fn maybe_await(expr: TokenStream) -> TokenStream {
|
||||||
let expr: proc_macro2::TokenStream = expr.into();
|
let expr: proc_macro2::TokenStream = expr.into();
|
||||||
let quoted = quote! {
|
let quoted = quote! {
|
||||||
{
|
{
|
||||||
#[cfg(all(not(target_arch = "wasm32"), not(feature = "async-interface")))]
|
#[cfg(not(feature = "async-interface"))]
|
||||||
{
|
{
|
||||||
#expr
|
#expr
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(any(target_arch = "wasm32", feature = "async-interface"))]
|
#[cfg(feature = "async-interface")]
|
||||||
{
|
{
|
||||||
#expr.await
|
#expr.await
|
||||||
}
|
}
|
||||||
@ -122,20 +122,20 @@ pub fn maybe_await(expr: TokenStream) -> TokenStream {
|
|||||||
quoted.into()
|
quoted.into()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Awaits if target_arch is "wasm32", uses `tokio::Runtime::block_on()` otherwise
|
/// Awaits, if the `async-interface` feature is enabled, uses `tokio::Runtime::block_on()` otherwise
|
||||||
///
|
///
|
||||||
/// Requires the `tokio` crate as a dependecy with `rt-core` or `rt-threaded` to build on non-wasm32 platforms.
|
/// Requires the `tokio` crate as a dependecy with `rt-core` or `rt-threaded` to build.
|
||||||
#[proc_macro]
|
#[proc_macro]
|
||||||
pub fn await_or_block(expr: TokenStream) -> TokenStream {
|
pub fn await_or_block(expr: TokenStream) -> TokenStream {
|
||||||
let expr: proc_macro2::TokenStream = expr.into();
|
let expr: proc_macro2::TokenStream = expr.into();
|
||||||
let quoted = quote! {
|
let quoted = quote! {
|
||||||
{
|
{
|
||||||
#[cfg(all(not(target_arch = "wasm32"), not(feature = "async-interface")))]
|
#[cfg(not(feature = "async-interface"))]
|
||||||
{
|
{
|
||||||
tokio::runtime::Builder::new_current_thread().enable_all().build().unwrap().block_on(#expr)
|
tokio::runtime::Builder::new_current_thread().enable_all().build().unwrap().block_on(#expr)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(any(target_arch = "wasm32", feature = "async-interface"))]
|
#[cfg(feature = "async-interface")]
|
||||||
{
|
{
|
||||||
#expr.await
|
#expr.await
|
||||||
}
|
}
|
||||||
|
@ -249,11 +249,8 @@ pub trait BlockchainFactory {
|
|||||||
/// operations to build a blockchain for a given wallet, so if a wallet needs to be synced
|
/// operations to build a blockchain for a given wallet, so if a wallet needs to be synced
|
||||||
/// often it's recommended to use [`BlockchainFactory::build_for_wallet`] to reuse the same
|
/// often it's recommended to use [`BlockchainFactory::build_for_wallet`] to reuse the same
|
||||||
/// blockchain multiple times.
|
/// blockchain multiple times.
|
||||||
#[cfg(not(any(target_arch = "wasm32", feature = "async-interface")))]
|
#[cfg(not(feature = "async-interface"))]
|
||||||
#[cfg_attr(
|
#[cfg_attr(docsrs, doc(cfg(not(feature = "async-interface"))))]
|
||||||
docsrs,
|
|
||||||
doc(cfg(not(any(target_arch = "wasm32", feature = "async-interface"))))
|
|
||||||
)]
|
|
||||||
fn sync_wallet<D: BatchDatabase>(
|
fn sync_wallet<D: BatchDatabase>(
|
||||||
&self,
|
&self,
|
||||||
wallet: &Wallet<D>,
|
wallet: &Wallet<D>,
|
||||||
|
@ -227,7 +227,7 @@ compile_error!(
|
|||||||
#[cfg(feature = "keys-bip39")]
|
#[cfg(feature = "keys-bip39")]
|
||||||
extern crate bip39;
|
extern crate bip39;
|
||||||
|
|
||||||
#[cfg(any(target_arch = "wasm32", feature = "async-interface"))]
|
#[cfg(feature = "async-interface")]
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate async_trait;
|
extern crate async_trait;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user