mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 19:21:13 +00:00
b069c4425a
* WIP second pass over light client code for simpler API * First pass new light client * pub(crate) LightClientRpc::new_raw(), and fmt * Update examples and add back a way to configure boot nodes and fetch chainspec from a URL * Fix light client examples * remove unused deps and tidy lightclient feature flags * fix wasm error * LightClientRpc can be cloned * update light client tests * Other small fixes * exclude mod unless jsonrpsee * Fix wasm-lightclient-tests * add back docsrs bit and web+native feature flag compile error * update book and light client example names * fix docs
53 lines
1.6 KiB
Rust
53 lines
1.6 KiB
Rust
// Copyright 2019-2023 Parity Technologies (UK) Ltd.
|
|
// This file is dual-licensed as Apache-2.0 or GPL-3.0.
|
|
// see LICENSE for license details.
|
|
|
|
use super::{RawRpcFuture, RawRpcSubscription, RpcClientT};
|
|
use crate::error::RpcError;
|
|
use futures::stream::{StreamExt, TryStreamExt};
|
|
use serde_json::value::RawValue;
|
|
use subxt_lightclient::{LightClientRpc, LightClientRpcError};
|
|
|
|
impl RpcClientT for LightClientRpc {
|
|
fn request_raw<'a>(
|
|
&'a self,
|
|
method: &'a str,
|
|
params: Option<Box<RawValue>>,
|
|
) -> RawRpcFuture<'a, Box<RawValue>> {
|
|
Box::pin(async move {
|
|
let res = self.request(method.to_owned(), params)
|
|
.await
|
|
.map_err(lc_err_to_rpc_err)?;
|
|
|
|
Ok(res)
|
|
})
|
|
}
|
|
|
|
fn subscribe_raw<'a>(
|
|
&'a self,
|
|
sub: &'a str,
|
|
params: Option<Box<RawValue>>,
|
|
unsub: &'a str,
|
|
) -> RawRpcFuture<'a, RawRpcSubscription> {
|
|
Box::pin(async move {
|
|
let sub = self.subscribe(sub.to_owned(), params, unsub.to_owned())
|
|
.await
|
|
.map_err(lc_err_to_rpc_err)?;
|
|
|
|
let id = Some(sub.id().to_owned());
|
|
let stream = sub
|
|
.map_err(|e| RpcError::ClientError(Box::new(e)))
|
|
.boxed();
|
|
|
|
Ok(RawRpcSubscription { id, stream })
|
|
})
|
|
}
|
|
}
|
|
|
|
fn lc_err_to_rpc_err(err: LightClientRpcError) -> RpcError {
|
|
match err {
|
|
LightClientRpcError::JsonRpcError(e) => RpcError::ClientError(Box::new(e)),
|
|
LightClientRpcError::SmoldotError(e) => RpcError::RequestRejected(e),
|
|
LightClientRpcError::BackgroundTaskDropped => RpcError::SubscriptionDropped,
|
|
}
|
|
} |