mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-09 10:37:58 +00:00
816a86423b
* WIP extract RPCs into separate crate * fmt * Fix test * Remove unused deps * fix import * WIP: Fix up errors and most tests. Start extracintg some tests/code to rpc crate * MockRpcClient sync or async * MockRpcClient only async but better type inference * WIP MockRpcClient FnMuts and some test updates to use it * Get all but one test working with new MockRpcClient * WIP trying to debug failure * WIP, Tests mostly fixed, need to add back oen more * Get mock RPC tests working * fmt * fmt * Clippy and comment tweak * update CI to explicitly check subxt-rpc features * clippy * small tweaks after pass over * feature flag rename * update some docs * Fix some examples * fmt * Fix features flags to work with web/wasm32 * Fix unused dep warning * explicit targets in wasm CI * Add better crate level docs * fmt * Address review comments * Comment out flaky test for now and make more obvious how similar POlkadot and Substrate configs are * Not a doc comment * Remove unused imports
62 lines
2.0 KiB
Rust
62 lines
2.0 KiB
Rust
// Copyright 2019-2025 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;
|
|
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?;
|
|
|
|
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?;
|
|
|
|
let id = Some(sub.id().to_owned());
|
|
let stream = sub
|
|
.map_err(|e| Error::Client(Box::new(e)))
|
|
.boxed();
|
|
|
|
Ok(RawRpcSubscription { id, stream })
|
|
})
|
|
}
|
|
}
|
|
|
|
impl From<LightClientRpcError> for Error {
|
|
fn from(err: LightClientRpcError) -> Error {
|
|
match err {
|
|
LightClientRpcError::JsonRpcError(e) => {
|
|
// If the error is a typical user error, report it as such, else
|
|
// just wrap the error into a ClientError.
|
|
let Ok(user_error) = e.try_deserialize() else {
|
|
return Error::Client(Box::<CoreError>::from(e))
|
|
};
|
|
Error::User(user_error)
|
|
},
|
|
LightClientRpcError::SmoldotError(e) => Error::Client(Box::<CoreError>::from(e)),
|
|
LightClientRpcError::BackgroundTaskDropped => Error::Client(Box::<CoreError>::from("Smoldot background task was dropped")),
|
|
}
|
|
}
|
|
}
|
|
|
|
type CoreError = dyn core::error::Error + Send + Sync + 'static; |