app_forge_kit_service/
signal.rs1use 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}