Skip to main content

app_forge_kit_service/
signal.rs

1use signal_hook::consts;
2use std::ffi::c_int;
3use std::fmt::Display;
4
5#[derive(Clone)]
6pub enum Signal {
7    UNKNOWN,
8    SIGINT,
9    SIGTERM,
10}
11
12impl Signal {
13    pub fn is_unknown(&self) -> bool {
14        matches!(*self, Signal::UNKNOWN)
15    }
16
17    pub fn is_terminate(&self) -> bool {
18        matches!(*self, Signal::SIGINT | Signal::SIGTERM)
19    }
20}
21
22impl Display for Signal {
23    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
24        write!(f, "signal: {}", Into::<c_int>::into(self))
25    }
26}
27
28impl From<&Signal> for c_int {
29    fn from(signal: &Signal) -> c_int {
30        match signal {
31            Signal::UNKNOWN => 0 as c_int,
32            Signal::SIGINT => consts::SIGINT,
33            Signal::SIGTERM => consts::SIGTERM,
34        }
35    }
36}
37
38impl From<&c_int> for Signal {
39    fn from(signal: &c_int) -> Signal {
40        match *signal {
41            consts::SIGINT => Signal::SIGINT,
42            consts::SIGTERM => Signal::SIGTERM,
43            _ => Signal::UNKNOWN,
44        }
45    }
46}
47
48impl From<Signal> for c_int {
49    fn from(signal: Signal) -> c_int {
50        (&signal).into()
51    }
52}
53
54impl From<c_int> for Signal {
55    fn from(signal: c_int) -> Signal {
56        (&signal).into()
57    }
58}
59
60impl From<&Signal> for usize {
61    fn from(signal: &Signal) -> usize {
62        c_int::from(signal) as usize
63    }
64}
65
66impl From<&usize> for Signal {
67    fn from(signal: &usize) -> Signal {
68        ((*signal) as c_int).into()
69    }
70}
71
72impl From<Signal> for usize {
73    fn from(signal: Signal) -> usize {
74        (&signal).into()
75    }
76}
77
78impl From<usize> for Signal {
79    fn from(signal: usize) -> Signal {
80        (&signal).into()
81    }
82}