gateway_common/
shutdown.rs

1use 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}