fetch-metadata: remove tokio

This commit is contained in:
Niklas Adolfsson
2024-10-11 16:14:38 +02:00
parent 0e86993cd7
commit 9b68c0a1b2
5 changed files with 16 additions and 38 deletions
Generated
+1 -1
View File
@@ -10635,7 +10635,6 @@ dependencies = [
"subxt-metadata",
"syn 2.0.77",
"thiserror",
"tokio",
]
[[package]]
@@ -10699,6 +10698,7 @@ name = "subxt-macro"
version = "0.37.0"
dependencies = [
"darling 0.20.10",
"futures",
"parity-scale-codec",
"polkadot-sdk",
"proc-macro-error2",
+2 -3
View File
@@ -13,7 +13,7 @@ description = "Generate an API for interacting with a substrate node from FRAME
[features]
default = []
fetch-metadata = ["dep:jsonrpsee", "dep:tokio", "dep:frame-metadata"]
fetch-metadata = ["dep:jsonrpsee", "dep:frame-metadata"]
web = ["jsonrpsee?/async-wasm-client", "jsonrpsee?/client-web-transport", "getrandom/js"]
[dependencies]
@@ -25,9 +25,8 @@ quote = { workspace = true }
syn = { workspace = true }
scale-info = { workspace = true }
subxt-metadata = { workspace = true }
jsonrpsee = { workspace = true, features = ["async-client", "client-ws-transport-tls", "http-client"], optional = true }
jsonrpsee = { workspace = true, features = ["ws-client", "http-client"], optional = true }
hex = { workspace = true, features = ["std"] }
tokio = { workspace = true, features = ["rt-multi-thread"], optional = true }
thiserror = { workspace = true }
scale-typegen = { workspace = true }
+4 -29
View File
@@ -7,11 +7,7 @@
use crate::error::FetchMetadataError;
use codec::{Decode, Encode};
use jsonrpsee::{
async_client::ClientBuilder,
client_transport::ws::WsTransportClientBuilder,
core::client::{ClientT, Error},
http_client::HttpClientBuilder,
rpc_params,
core::client::ClientT, http_client::HttpClientBuilder, rpc_params, ws_client::WsClientBuilder,
};
use std::time::Duration;
@@ -60,23 +56,6 @@ pub fn fetch_metadata_from_file_blocking(
Ok(bytes)
}
/// Returns the metadata bytes from the provided URL, blocking the current thread.
pub fn fetch_metadata_from_url_blocking(
url: Url,
version: MetadataVersion,
) -> Result<Vec<u8>, FetchMetadataError> {
tokio_block_on(fetch_metadata_from_url(url, version))
}
// Block on some tokio runtime for sync contexts
fn tokio_block_on<T, Fut: std::future::Future<Output = T>>(fut: Fut) -> T {
tokio::runtime::Builder::new_multi_thread()
.enable_all()
.build()
.unwrap()
.block_on(fut)
}
/// Returns the metadata bytes from the provided URL.
pub async fn fetch_metadata_from_url(
url: Url,
@@ -95,15 +74,11 @@ async fn fetch_metadata_ws(
url: Url,
version: MetadataVersion,
) -> Result<Vec<u8>, FetchMetadataError> {
let (sender, receiver) = WsTransportClientBuilder::default()
.build(url)
.await
.map_err(|e| Error::Transport(e.into()))?;
let client = ClientBuilder::default()
let client = WsClientBuilder::new()
.request_timeout(Duration::from_secs(180))
.max_buffer_capacity_per_subscription(4096)
.build_with_tokio(sender, receiver);
.build(url)
.await?;
fetch_metadata(client, version).await
}
+1
View File
@@ -29,6 +29,7 @@ quote = { workspace = true }
subxt-codegen = { workspace = true, features = ["fetch-metadata"] }
scale-typegen = { workspace = true }
polkadot-sdk = { workspace = true, optional = true, features = ["sp-io", "sc-executor-common", "sp-state-machine", "sp-maybe-compressed-blob", "sc-executor"] }
futures = { workspace = true, features = ["executor"] }
[lints]
workspace = true
+8 -5
View File
@@ -17,7 +17,7 @@ use scale_typegen::typegen::{
};
use subxt_codegen::{
fetch_metadata::{
fetch_metadata_from_file_blocking, fetch_metadata_from_url_blocking, MetadataVersion, Url,
fetch_metadata_from_file_blocking, fetch_metadata_from_url, MetadataVersion, Url,
},
CodegenBuilder, CodegenError, Metadata,
};
@@ -256,10 +256,13 @@ fn fetch_metadata(args: &RuntimeMetadataArgs) -> Result<subxt_codegen::Metadata,
false => MetadataVersion::Latest,
};
fetch_metadata_from_url_blocking(url, version)
.map_err(CodegenError::from)
.and_then(|b| subxt_codegen::Metadata::decode(&mut &*b).map_err(Into::into))
.map_err(|e| e.into_compile_error())?
futures::executor::block_on(async {
fetch_metadata_from_url(url, version)
.await
.map_err(CodegenError::from)
.and_then(|b| subxt_codegen::Metadata::decode(&mut &*b).map_err(Into::into))
.map_err(|e| e.into_compile_error())
})?
}
#[cfg(feature = "runtime-path")]
(None, None) => {