Skip to main content

aster_cli/
signal.rs

1use std::future::Future;
2use std::pin::Pin;
3use tokio::signal;
4
5#[cfg(unix)]
6pub fn shutdown_signal() -> Pin<Box<dyn Future<Output = ()> + Send>> {
7    Box::pin(async move {
8        let ctrl_c = async {
9            signal::ctrl_c()
10                .await
11                .expect("failed to install Ctrl+C handler");
12        };
13
14        #[cfg(unix)]
15        let terminate = async {
16            signal::unix::signal(signal::unix::SignalKind::terminate())
17                .expect("failed to install signal handler")
18                .recv()
19                .await;
20        };
21
22        tokio::select! {
23            _ = ctrl_c => {},
24            _ = terminate => {},
25        }
26    })
27}
28
29#[cfg(not(unix))]
30pub fn shutdown_signal() -> Pin<Box<dyn Future<Output = ()> + Send>> {
31    Box::pin(async move {
32        signal::ctrl_c()
33            .await
34            .expect("failed to install Ctrl+C handler");
35    })
36}