1use futures::stream::StreamExt as _;
2use libc::{SIGRTMAX, SIGRTMIN};
3use signal_hook::consts::{SIGUSR1, SIGUSR2};
4use signal_hook_tokio::Signals;
5
6use crate::BoxedStream;
7
8#[derive(Debug, Clone, Copy, PartialEq, Eq)]
9pub enum Signal {
10 Usr1,
11 Usr2,
12 Custom(i32),
13}
14
15pub fn signals_stream() -> BoxedStream<Signal> {
17 let (sigmin, sigmax) = (SIGRTMIN(), SIGRTMAX());
18 let signals = Signals::new((sigmin..sigmax).chain([SIGUSR1, SIGUSR2])).unwrap();
19 signals
20 .map(move |signal| match signal {
21 SIGUSR1 => Signal::Usr1,
22 SIGUSR2 => Signal::Usr2,
23 x => Signal::Custom(x - sigmin),
24 })
25 .boxed()
26}