substrate_api_client/rpc/jsonrpsee_client/
subscription.rs

1/*
2   Copyright 2019 Supercomputing Systems AG
3   Licensed under the Apache License, Version 2.0 (the "License");
4   you may not use this file except in compliance with the License.
5   You may obtain a copy of the License at
6	   http://www.apache.org/licenses/LICENSE-2.0
7   Unless required by applicable law or agreed to in writing, software
8   distributed under the License is distributed on an "AS IS" BASIS,
9   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10   See the License for the specific language governing permissions and
11   limitations under the License.
12*/
13
14use 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}