substrate_api_client/rpc/jsonrpsee_client/
subscription.rs1use crate::rpc::{Error, HandleSubscription, Result};
15use jsonrpsee::core::client::Subscription;
16use serde::de::DeserializeOwned;
17
18#[derive(Debug)]
19pub struct SubscriptionWrapper<Notification> {
20 inner: Subscription<Notification>,
21}
22
23#[maybe_async::async_impl(?Send)]
24impl<Notification: DeserializeOwned> HandleSubscription<Notification>
25 for SubscriptionWrapper<Notification>
26{
27 async fn next(&mut self) -> Option<Result<Notification>> {
28 self.inner
29 .next()
30 .await
31 .map(|result| result.map_err(|e| Error::Client(Box::new(e))))
32 }
33
34 async fn unsubscribe(self) -> Result<()> {
35 self.inner.unsubscribe().await.map_err(|e| Error::Client(Box::new(e)))
36 }
37}
38
39impl<Notification> From<Subscription<Notification>> for SubscriptionWrapper<Notification> {
40 fn from(inner: Subscription<Notification>) -> Self {
41 Self { inner }
42 }
43}