@@ -6,7 +6,7 @@ use futures::{
6
6
task:: { Context , Poll } ,
7
7
Future , Sink , SinkExt , Stream , StreamExt ,
8
8
} ;
9
- use jsonrpc_core:: { BoxFuture , MetaIoHandler , Metadata } ;
9
+ use jsonrpc_core:: { BoxFuture , MetaIoHandler , Metadata , Middleware } ;
10
10
use jsonrpc_pubsub:: Session ;
11
11
use std:: ops:: Deref ;
12
12
use std:: pin:: Pin ;
@@ -26,10 +26,11 @@ enum Buffered {
26
26
None ,
27
27
}
28
28
29
- impl < TMetadata , THandler > LocalRpc < THandler , TMetadata >
29
+ impl < TMetadata , THandler , TMiddleware > LocalRpc < THandler , TMetadata >
30
30
where
31
31
TMetadata : Metadata ,
32
- THandler : Deref < Target = MetaIoHandler < TMetadata > > ,
32
+ TMiddleware : Middleware < TMetadata > ,
33
+ THandler : Deref < Target = MetaIoHandler < TMetadata , TMiddleware > > ,
33
34
{
34
35
/// Creates a new `LocalRpc` with default metadata.
35
36
pub fn new ( handler : THandler ) -> Self
@@ -50,10 +51,11 @@ where
50
51
}
51
52
}
52
53
53
- impl < TMetadata , THandler > Stream for LocalRpc < THandler , TMetadata >
54
+ impl < TMetadata , THandler , TMiddleware > Stream for LocalRpc < THandler , TMetadata >
54
55
where
55
56
TMetadata : Metadata + Unpin ,
56
- THandler : Deref < Target = MetaIoHandler < TMetadata > > + Unpin ,
57
+ TMiddleware : Middleware < TMetadata > + Unpin ,
58
+ THandler : Deref < Target = MetaIoHandler < TMetadata , TMiddleware > > + Unpin ,
57
59
{
58
60
type Item = String ;
59
61
@@ -62,10 +64,11 @@ where
62
64
}
63
65
}
64
66
65
- impl < TMetadata , THandler > LocalRpc < THandler , TMetadata >
67
+ impl < TMetadata , THandler , TMiddleware > LocalRpc < THandler , TMetadata >
66
68
where
67
69
TMetadata : Metadata + Unpin ,
68
- THandler : Deref < Target = MetaIoHandler < TMetadata > > + Unpin ,
70
+ TMiddleware : Middleware < TMetadata > + Unpin ,
71
+ THandler : Deref < Target = MetaIoHandler < TMetadata , TMiddleware > > + Unpin ,
69
72
{
70
73
fn poll_buffered ( & mut self , cx : & mut Context ) -> Poll < Result < ( ) , RpcError > > {
71
74
let response = match self . buffered {
@@ -87,10 +90,11 @@ where
87
90
}
88
91
}
89
92
90
- impl < TMetadata , THandler > Sink < String > for LocalRpc < THandler , TMetadata >
93
+ impl < TMetadata , THandler , TMiddleware > Sink < String > for LocalRpc < THandler , TMetadata >
91
94
where
92
95
TMetadata : Metadata + Unpin ,
93
- THandler : Deref < Target = MetaIoHandler < TMetadata > > + Unpin ,
96
+ TMiddleware : Middleware < TMetadata > + Unpin ,
97
+ THandler : Deref < Target = MetaIoHandler < TMetadata , TMiddleware > > + Unpin ,
94
98
{
95
99
type Error = RpcError ;
96
100
@@ -121,14 +125,15 @@ where
121
125
}
122
126
}
123
127
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 > (
126
130
handler : THandler ,
127
131
meta : TMetadata ,
128
132
) -> ( TClient , impl Future < Output = RpcResult < ( ) > > )
129
133
where
130
134
TClient : From < RpcChannel > ,
131
- THandler : Deref < Target = MetaIoHandler < TMetadata > > + Unpin ,
135
+ TMiddleware : Middleware < TMetadata > + Unpin ,
136
+ THandler : Deref < Target = MetaIoHandler < TMetadata , TMiddleware > > + Unpin ,
132
137
TMetadata : Metadata + Unpin ,
133
138
{
134
139
let ( sink, stream) = LocalRpc :: with_metadata ( handler, meta) . split ( ) ;
@@ -137,24 +142,53 @@ where
137
142
( client, rpc_client)
138
143
}
139
144
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
+
140
171
/// Connects to a `Deref<Target = MetaIoHandler<Metadata + Default>`.
141
172
pub fn connect < TClient , THandler , TMetadata > ( handler : THandler ) -> ( TClient , impl Future < Output = RpcResult < ( ) > > )
142
173
where
143
174
TClient : From < RpcChannel > ,
144
- THandler : Deref < Target = MetaIoHandler < TMetadata > > + Unpin ,
145
175
TMetadata : Metadata + Default + Unpin ,
176
+ THandler : Deref < Target = MetaIoHandler < TMetadata > > + Unpin ,
146
177
{
147
- connect_with_metadata ( handler, Default :: default ( ) )
178
+ connect_with_middleware ( handler)
148
179
}
149
180
150
181
/// Metadata for LocalRpc.
151
182
pub type LocalMeta = Arc < Session > ;
152
183
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 < ( ) > > )
155
188
where
156
189
TClient : From < RpcChannel > ,
157
- THandler : Deref < Target = MetaIoHandler < LocalMeta > > + Unpin ,
190
+ TMiddleware : Middleware < LocalMeta > + Unpin ,
191
+ THandler : Deref < Target = MetaIoHandler < LocalMeta , TMiddleware > > + Unpin ,
158
192
{
159
193
let ( tx, rx) = mpsc:: unbounded ( ) ;
160
194
let meta = Arc :: new ( Session :: new ( tx) ) ;
@@ -164,3 +198,12 @@ where
164
198
let client = TClient :: from ( sender) ;
165
199
( client, rpc_client)
166
200
}
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