@@ -4,7 +4,7 @@ use futures::future::FutureExt as _;
4
4
use spawned_rt:: tasks:: { self as rt, mpsc, oneshot} ;
5
5
use std:: { fmt:: Debug , future:: Future , panic:: AssertUnwindSafe } ;
6
6
7
- use super :: error:: GenServerError ;
7
+ use crate :: error:: GenServerError ;
8
8
9
9
#[ derive( Debug ) ]
10
10
pub struct GenServerHandle < G : GenServer + ' static > {
@@ -93,11 +93,13 @@ pub enum GenServerInMsg<G: GenServer> {
93
93
94
94
pub enum CallResponse < G : GenServer > {
95
95
Reply ( G :: State , G :: OutMsg ) ,
96
+ Unused ,
96
97
Stop ( G :: OutMsg ) ,
97
98
}
98
99
99
100
pub enum CastResponse < G : GenServer > {
100
101
NoReply ( G :: State ) ,
102
+ Unused ,
101
103
Stop ,
102
104
}
103
105
@@ -181,7 +183,7 @@ where
181
183
handle : & GenServerHandle < Self > ,
182
184
rx : & mut mpsc:: Receiver < GenServerInMsg < Self > > ,
183
185
state : Self :: State ,
184
- ) -> impl std :: future :: Future < Output = Result < ( Self :: State , bool ) , GenServerError > > + Send {
186
+ ) -> impl Future < Output = Result < ( Self :: State , bool ) , GenServerError > > + Send {
185
187
async move {
186
188
let message = rx. recv ( ) . await ;
187
189
@@ -200,17 +202,21 @@ where
200
202
( true , new_state, Ok ( response) )
201
203
}
202
204
CallResponse :: Stop ( response) => ( false , state_clone, Ok ( response) ) ,
205
+ CallResponse :: Unused => {
206
+ tracing:: error!( "GenServer received unexpected CallMessage" ) ;
207
+ ( false , state_clone, Err ( GenServerError :: CallMsgUnused ) )
208
+ }
203
209
} ,
204
210
Err ( error) => {
205
- tracing:: trace !(
211
+ tracing:: error !(
206
212
"Error in callback, reverting state - Error: '{error:?}'"
207
213
) ;
208
214
( true , state_clone, Err ( GenServerError :: Callback ) )
209
215
}
210
216
} ;
211
217
// Send response back
212
218
if sender. send ( response) . is_err ( ) {
213
- tracing:: trace !(
219
+ tracing:: error !(
214
220
"GenServer failed to send response back, client must have died"
215
221
)
216
222
} ;
@@ -224,6 +230,10 @@ where
224
230
Ok ( response) => match response {
225
231
CastResponse :: NoReply ( new_state) => ( true , new_state) ,
226
232
CastResponse :: Stop => ( false , state_clone) ,
233
+ CastResponse :: Unused => {
234
+ tracing:: error!( "GenServer received unexpected CastMessage" ) ;
235
+ ( false , state_clone)
236
+ }
227
237
} ,
228
238
Err ( error) => {
229
239
tracing:: trace!(
@@ -244,17 +254,21 @@ where
244
254
245
255
fn handle_call (
246
256
& mut self ,
247
- message : Self :: CallMsg ,
248
- handle : & GenServerHandle < Self > ,
249
- state : Self :: State ,
250
- ) -> impl std:: future:: Future < Output = CallResponse < Self > > + Send ;
257
+ _message : Self :: CallMsg ,
258
+ _handle : & GenServerHandle < Self > ,
259
+ _state : Self :: State ,
260
+ ) -> impl Future < Output = CallResponse < Self > > + Send {
261
+ async { CallResponse :: Unused }
262
+ }
251
263
252
264
fn handle_cast (
253
265
& mut self ,
254
- message : Self :: CastMsg ,
255
- handle : & GenServerHandle < Self > ,
256
- state : Self :: State ,
257
- ) -> impl std:: future:: Future < Output = CastResponse < Self > > + Send ;
266
+ _message : Self :: CastMsg ,
267
+ _handle : & GenServerHandle < Self > ,
268
+ _state : Self :: State ,
269
+ ) -> impl Future < Output = CastResponse < Self > > + Send {
270
+ async { CastResponse :: Unused }
271
+ }
258
272
}
259
273
260
274
#[ cfg( test) ]
0 commit comments