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}