@@ -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 } ;
1010use jsonrpc_pubsub:: Session ;
1111use std:: ops:: Deref ;
1212use 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 >
3030where
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 >
5455where
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 >
6668where
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 >
9194where
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 < ( ) > > )
129133where
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>`.
141172pub fn connect < TClient , THandler , TMetadata > ( handler : THandler ) -> ( TClient , impl Future < Output = RpcResult < ( ) > > )
142173where
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.
151182pub 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 < ( ) > > )
155188where
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