rpc: Expose the subscription ID for RpcClientT (#733)

* rpc: Extend `RpcClientT` to return the subscription ID

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* rpc: Return `RpcSubscriptionId` for jsonrpsee clients

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* rpc: Expose subscription ID via subxt subscription

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* examples: Adjust example to return subscription ID

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* rpc: Add structure for subscription stream and subscription id

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
This commit is contained in:
Alexandru Vasile
2022-11-25 17:07:26 +02:00
committed by GitHub
parent f0ce26db7b
commit 463e2aa93f
5 changed files with 48 additions and 15 deletions
+25 -12
View File
@@ -12,14 +12,18 @@ use futures::stream::{
StreamExt,
TryStreamExt,
};
use jsonrpsee::core::{
client::{
Client,
ClientT,
SubscriptionClientT,
use jsonrpsee::{
core::{
client::{
Client,
ClientT,
SubscriptionClientT,
SubscriptionKind,
},
traits::ToRpcParams,
Error as JsonRpseeError,
},
traits::ToRpcParams,
Error as JsonRpseeError,
types::SubscriptionId,
};
use serde_json::value::RawValue;
@@ -52,17 +56,26 @@ impl RpcClientT for Client {
unsub: &'a str,
) -> RpcFuture<'a, RpcSubscription> {
Box::pin(async move {
let sub = SubscriptionClientT::subscribe::<Box<RawValue>, _>(
let stream = SubscriptionClientT::subscribe::<Box<RawValue>, _>(
self,
sub,
Params(params),
unsub,
)
.await
.map_err(|e| RpcError::ClientError(Box::new(e)))?
.map_err(|e| RpcError::ClientError(Box::new(e)))
.boxed();
Ok(sub)
.map_err(|e| RpcError::ClientError(Box::new(e)))?;
let id = match stream.kind() {
SubscriptionKind::Subscription(SubscriptionId::Str(id)) => {
Some(id.clone().into_owned())
}
_ => None,
};
let stream = stream
.map_err(|e| RpcError::ClientError(Box::new(e)))
.boxed();
Ok(RpcSubscription { stream, id })
})
}
}