3
3
use async_std:: io;
4
4
use async_std:: sync:: Arc ;
5
5
6
+ use crate :: cancellation:: StopToken ;
6
7
#[ cfg( feature = "cookies" ) ]
7
8
use crate :: cookies;
8
9
use crate :: listener:: { Listener , ToListener } ;
@@ -38,6 +39,7 @@ pub struct Server<State> {
38
39
/// We don't use a Mutex around the Vec here because adding a middleware during execution should be an error.
39
40
#[ allow( clippy:: rc_buffer) ]
40
41
middleware : Arc < Vec < Arc < dyn Middleware < State > > > > ,
42
+ pub ( crate ) stop_token : StopToken ,
41
43
}
42
44
43
45
impl Server < ( ) > {
@@ -113,6 +115,7 @@ where
113
115
Arc :: new( log:: LogMiddleware :: new( ) ) ,
114
116
] ) ,
115
117
state,
118
+ stop_token : StopToken :: never ( ) ,
116
119
}
117
120
}
118
121
@@ -286,6 +289,7 @@ where
286
289
router,
287
290
state,
288
291
middleware,
292
+ stop_token : _,
289
293
} = self . clone ( ) ;
290
294
291
295
let method = req. method ( ) . to_owned ( ) ;
@@ -317,6 +321,11 @@ where
317
321
pub fn state ( & self ) -> & State {
318
322
& self . state
319
323
}
324
+
325
+ pub fn stop_on ( & mut self , stop_token : StopToken ) -> & mut Self {
326
+ self . stop_token = stop_token;
327
+ self
328
+ }
320
329
}
321
330
322
331
impl < State : Send + Sync + ' static > std:: fmt:: Debug for Server < State > {
@@ -331,6 +340,7 @@ impl<State: Clone> Clone for Server<State> {
331
340
router : self . router . clone ( ) ,
332
341
state : self . state . clone ( ) ,
333
342
middleware : self . middleware . clone ( ) ,
343
+ stop_token : self . stop_token . clone ( ) ,
334
344
}
335
345
}
336
346
}
0 commit comments