1pub async fn shutdown() {
5 imp::shutdown().await
6}
7
8#[cfg(target_arch = "wasm32")]
10mod imp {
11 pub(super) async fn shutdown() {
12 std::future::pending::<()>().await
13 }
14}
15
16#[cfg(all(unix, not(target_arch = "wasm32")))]
17mod imp {
18 use tokio::signal::unix::{SignalKind, signal};
19 use tracing::info;
20
21 pub(super) async fn shutdown() {
22 tokio::select! {
23 _ = sig(SignalKind::interrupt(), "SIGINT") => {}
25 _ = sig(SignalKind::terminate(), "SIGTERM") => {}
28 };
29 }
30
31 async fn sig(kind: SignalKind, name: &str) {
32 signal(kind)
33 .expect("Failed to register signal handler")
34 .recv()
35 .await;
36 info!(
37 target: "slim::signal",
38 signal = %name,
39 "received signal, starting shutdown",
40 );
41 }
42}
43
44#[cfg(all(not(unix), not(target_arch = "wasm32")))]
45mod imp {
46 use tracing::info;
47
48 pub(super) async fn shutdown() {
49 tokio::signal::windows::ctrl_c()
50 .expect("Failed to register signal handler")
51 .recv()
52 .await;
53 info!(
54 target: "slim::signal",
55 "received signal Ctrl-C, starting shutdown",
56 );
57 }
58}