Skip to content

Commit ac0de5c

Browse files
author
rusty
committed
Add stop_token to server
1 parent de96717 commit ac0de5c

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

src/server.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
use async_std::io;
44
use async_std::sync::Arc;
55

6+
use crate::cancellation::StopToken;
67
#[cfg(feature = "cookies")]
78
use crate::cookies;
89
use crate::listener::{Listener, ToListener};
@@ -38,6 +39,7 @@ pub struct Server<State> {
3839
/// We don't use a Mutex around the Vec here because adding a middleware during execution should be an error.
3940
#[allow(clippy::rc_buffer)]
4041
middleware: Arc<Vec<Arc<dyn Middleware<State>>>>,
42+
pub(crate) stop_token: StopToken,
4143
}
4244

4345
impl Server<()> {
@@ -113,6 +115,7 @@ where
113115
Arc::new(log::LogMiddleware::new()),
114116
]),
115117
state,
118+
stop_token: StopToken::never(),
116119
}
117120
}
118121

@@ -286,6 +289,7 @@ where
286289
router,
287290
state,
288291
middleware,
292+
stop_token: _,
289293
} = self.clone();
290294

291295
let method = req.method().to_owned();
@@ -317,6 +321,11 @@ where
317321
pub fn state(&self) -> &State {
318322
&self.state
319323
}
324+
325+
pub fn stop_on(&mut self, stop_token: StopToken) -> &mut Self {
326+
self.stop_token = stop_token;
327+
self
328+
}
320329
}
321330

322331
impl<State: Send + Sync + 'static> std::fmt::Debug for Server<State> {
@@ -331,6 +340,7 @@ impl<State: Clone> Clone for Server<State> {
331340
router: self.router.clone(),
332341
state: self.state.clone(),
333342
middleware: self.middleware.clone(),
343+
stop_token: self.stop_token.clone(),
334344
}
335345
}
336346
}

0 commit comments

Comments
 (0)