Skip to content

Commit 61ea7c6

Browse files
tomusdrwseunlanlegeniklasad1
authored
[forwardport] Update local client to support middleware (Kudos Seun) (#589) (#600)
* Update `local` client to support middleware (Kudos Seun) (#589) * v15.0.1 * v15.0.1 => v15.1.0 * v15.0.1 => v15.1.0 * cargo fmt * fix tests * adds *_with_middleware methods * remove Unpin bound, add documentation, cargo fmt * 15.0.1 * bump to 15.1.0 Co-authored-by: Seun Lanlege <[email protected]> Co-authored-by: Niklas <[email protected]> * cargo fmt --all Co-authored-by: Seun Lanlege <[email protected]> Co-authored-by: Niklas <[email protected]>
1 parent 40eec20 commit 61ea7c6

File tree

1 file changed

+60
-17
lines changed
  • core-client/transports/src/transports

1 file changed

+60
-17
lines changed

core-client/transports/src/transports/local.rs

+60-17
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use futures::{
66
task::{Context, Poll},
77
Future, Sink, SinkExt, Stream, StreamExt,
88
};
9-
use jsonrpc_core::{BoxFuture, MetaIoHandler, Metadata};
9+
use jsonrpc_core::{BoxFuture, MetaIoHandler, Metadata, Middleware};
1010
use jsonrpc_pubsub::Session;
1111
use std::ops::Deref;
1212
use std::pin::Pin;
@@ -26,10 +26,11 @@ enum Buffered {
2626
None,
2727
}
2828

29-
impl<TMetadata, THandler> LocalRpc<THandler, TMetadata>
29+
impl<TMetadata, THandler, TMiddleware> LocalRpc<THandler, TMetadata>
3030
where
3131
TMetadata: Metadata,
32-
THandler: Deref<Target = MetaIoHandler<TMetadata>>,
32+
TMiddleware: Middleware<TMetadata>,
33+
THandler: Deref<Target = MetaIoHandler<TMetadata, TMiddleware>>,
3334
{
3435
/// Creates a new `LocalRpc` with default metadata.
3536
pub fn new(handler: THandler) -> Self
@@ -50,10 +51,11 @@ where
5051
}
5152
}
5253

53-
impl<TMetadata, THandler> Stream for LocalRpc<THandler, TMetadata>
54+
impl<TMetadata, THandler, TMiddleware> Stream for LocalRpc<THandler, TMetadata>
5455
where
5556
TMetadata: Metadata + Unpin,
56-
THandler: Deref<Target = MetaIoHandler<TMetadata>> + Unpin,
57+
TMiddleware: Middleware<TMetadata> + Unpin,
58+
THandler: Deref<Target = MetaIoHandler<TMetadata, TMiddleware>> + Unpin,
5759
{
5860
type Item = String;
5961

@@ -62,10 +64,11 @@ where
6264
}
6365
}
6466

65-
impl<TMetadata, THandler> LocalRpc<THandler, TMetadata>
67+
impl<TMetadata, THandler, TMiddleware> LocalRpc<THandler, TMetadata>
6668
where
6769
TMetadata: Metadata + Unpin,
68-
THandler: Deref<Target = MetaIoHandler<TMetadata>> + Unpin,
70+
TMiddleware: Middleware<TMetadata> + Unpin,
71+
THandler: Deref<Target = MetaIoHandler<TMetadata, TMiddleware>> + Unpin,
6972
{
7073
fn poll_buffered(&mut self, cx: &mut Context) -> Poll<Result<(), RpcError>> {
7174
let response = match self.buffered {
@@ -87,10 +90,11 @@ where
8790
}
8891
}
8992

90-
impl<TMetadata, THandler> Sink<String> for LocalRpc<THandler, TMetadata>
93+
impl<TMetadata, THandler, TMiddleware> Sink<String> for LocalRpc<THandler, TMetadata>
9194
where
9295
TMetadata: Metadata + Unpin,
93-
THandler: Deref<Target = MetaIoHandler<TMetadata>> + Unpin,
96+
TMiddleware: Middleware<TMetadata> + Unpin,
97+
THandler: Deref<Target = MetaIoHandler<TMetadata, TMiddleware>> + Unpin,
9498
{
9599
type Error = RpcError;
96100

@@ -121,14 +125,15 @@ where
121125
}
122126
}
123127

124-
/// Connects to a `Deref<Target = MetaIoHandler<Metadata>`.
125-
pub fn connect_with_metadata<TClient, THandler, TMetadata>(
128+
/// Connects to a `Deref<Target = MetaIoHandler<Metadata>` specifying a custom middleware implementation.
129+
pub fn connect_with_metadata_and_middleware<TClient, THandler, TMetadata, TMiddleware>(
126130
handler: THandler,
127131
meta: TMetadata,
128132
) -> (TClient, impl Future<Output = RpcResult<()>>)
129133
where
130134
TClient: From<RpcChannel>,
131-
THandler: Deref<Target = MetaIoHandler<TMetadata>> + Unpin,
135+
TMiddleware: Middleware<TMetadata> + Unpin,
136+
THandler: Deref<Target = MetaIoHandler<TMetadata, TMiddleware>> + Unpin,
132137
TMetadata: Metadata + Unpin,
133138
{
134139
let (sink, stream) = LocalRpc::with_metadata(handler, meta).split();
@@ -137,24 +142,53 @@ where
137142
(client, rpc_client)
138143
}
139144

145+
/// Connects to a `Deref<Target = MetaIoHandler<Metadata>`.
146+
pub fn connect_with_metadata<TClient, THandler, TMetadata>(
147+
handler: THandler,
148+
meta: TMetadata,
149+
) -> (TClient, impl Future<Output = RpcResult<()>>)
150+
where
151+
TClient: From<RpcChannel>,
152+
TMetadata: Metadata + Unpin,
153+
THandler: Deref<Target = MetaIoHandler<TMetadata>> + Unpin,
154+
{
155+
connect_with_metadata_and_middleware(handler, meta)
156+
}
157+
158+
/// Connects to a `Deref<Target = MetaIoHandler<Metadata + Default>` specifying a custom middleware implementation.
159+
pub fn connect_with_middleware<TClient, THandler, TMetadata, TMiddleware>(
160+
handler: THandler,
161+
) -> (TClient, impl Future<Output = RpcResult<()>>)
162+
where
163+
TClient: From<RpcChannel>,
164+
TMetadata: Metadata + Default + Unpin,
165+
TMiddleware: Middleware<TMetadata> + Unpin,
166+
THandler: Deref<Target = MetaIoHandler<TMetadata, TMiddleware>> + Unpin,
167+
{
168+
connect_with_metadata_and_middleware(handler, Default::default())
169+
}
170+
140171
/// Connects to a `Deref<Target = MetaIoHandler<Metadata + Default>`.
141172
pub fn connect<TClient, THandler, TMetadata>(handler: THandler) -> (TClient, impl Future<Output = RpcResult<()>>)
142173
where
143174
TClient: From<RpcChannel>,
144-
THandler: Deref<Target = MetaIoHandler<TMetadata>> + Unpin,
145175
TMetadata: Metadata + Default + Unpin,
176+
THandler: Deref<Target = MetaIoHandler<TMetadata>> + Unpin,
146177
{
147-
connect_with_metadata(handler, Default::default())
178+
connect_with_middleware(handler)
148179
}
149180

150181
/// Metadata for LocalRpc.
151182
pub type LocalMeta = Arc<Session>;
152183

153-
/// Connects with pubsub.
154-
pub fn connect_with_pubsub<TClient, THandler>(handler: THandler) -> (TClient, impl Future<Output = RpcResult<()>>)
184+
/// Connects with pubsub specifying a custom middleware implementation.
185+
pub fn connect_with_pubsub_and_middleware<TClient, THandler, TMiddleware>(
186+
handler: THandler,
187+
) -> (TClient, impl Future<Output = RpcResult<()>>)
155188
where
156189
TClient: From<RpcChannel>,
157-
THandler: Deref<Target = MetaIoHandler<LocalMeta>> + Unpin,
190+
TMiddleware: Middleware<LocalMeta> + Unpin,
191+
THandler: Deref<Target = MetaIoHandler<LocalMeta, TMiddleware>> + Unpin,
158192
{
159193
let (tx, rx) = mpsc::unbounded();
160194
let meta = Arc::new(Session::new(tx));
@@ -164,3 +198,12 @@ where
164198
let client = TClient::from(sender);
165199
(client, rpc_client)
166200
}
201+
202+
/// Connects with pubsub.
203+
pub fn connect_with_pubsub<TClient, THandler>(handler: THandler) -> (TClient, impl Future<Output = RpcResult<()>>)
204+
where
205+
TClient: From<RpcChannel>,
206+
THandler: Deref<Target = MetaIoHandler<LocalMeta>> + Unpin,
207+
{
208+
connect_with_pubsub_and_middleware(handler)
209+
}

0 commit comments

Comments
 (0)