rpc: Expose subscription ID via subxt subscription

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
This commit is contained in:
Alexandru Vasile
2022-11-24 17:00:48 +00:00
parent a7b0d328bc
commit ad57b95811
+11 -3
View File
@@ -5,6 +5,7 @@
use super::{
RpcClientT,
RpcSubscription,
RpcSubscriptionId,
};
use crate::error::Error;
use futures::{
@@ -60,8 +61,8 @@ impl RpcClient {
params: RpcParams,
unsub: &str,
) -> Result<Subscription<Res>, Error> {
let sub = self.0.subscribe_raw(sub, params.build(), unsub).await?;
Ok(Subscription::new(sub))
let (sub, sub_id) = self.0.subscribe_raw(sub, params.build(), unsub).await?;
Ok(Subscription::new(sub, sub_id))
}
}
@@ -166,6 +167,7 @@ impl RpcParams {
/// [`StreamExt`] extension trait.
pub struct Subscription<Res> {
inner: RpcSubscription,
sub_id: Option<RpcSubscriptionId>,
_marker: std::marker::PhantomData<Res>,
}
@@ -179,12 +181,18 @@ impl<Res> std::fmt::Debug for Subscription<Res> {
}
impl<Res> Subscription<Res> {
fn new(inner: RpcSubscription) -> Self {
fn new(inner: RpcSubscription, sub_id: Option<RpcSubscriptionId>) -> Self {
Self {
inner,
sub_id,
_marker: std::marker::PhantomData,
}
}
/// Obtain the ID associated with this subscription.
pub fn subscription_id(&self) -> Option<&RpcSubscriptionId> {
self.sub_id.as_ref()
}
}
impl<Res: DeserializeOwned> Subscription<Res> {