gateway_common/
shutdown.rs1use tokio::sync::broadcast;
2
3#[derive(Debug)]
4pub struct Shutdown {
5 shutdown: bool,
6 notify: broadcast::Receiver<()>,
7}
8
9impl Shutdown {
10 pub fn new(notify: broadcast::Receiver<()>) -> Self {
11 Shutdown {
12 shutdown: false,
13 notify,
14 }
15 }
16}
17
18impl Shutdown {
19 pub fn is_shutdown(&self) -> bool {
20 self.shutdown
21 }
22
23 pub fn _shutdown(&mut self) {
24 self.shutdown = true;
25 }
26
27 pub async fn recv(&mut self) {
28 if self.is_shutdown() {
29 return;
30 }
31 let _ = self.notify.recv().await;
32 self.shutdown = true;
33 }
34}