mekena_util/
shutdown.rs

1use flume::{Receiver, Sender};
2
3pub struct ShutdownManager {
4    sender: Sender<()>,
5    receiver: Receiver<()>,
6}
7
8impl ShutdownManager {
9    pub fn new() -> Self {
10        let (sender, receiver) = flume::bounded(1);
11
12        Self { sender, receiver }
13    }
14
15    pub async fn shutdown(&self) {
16        self.sender.send_async(()).await.unwrap()
17    }
18
19    pub async fn await_shutdown(&self) {
20        self.receiver.recv_async().await.unwrap()
21    }
22}