1use std::convert::TryFrom;
2use std::io;
3
4#[derive(Debug, Copy, Clone, PartialEq, Eq)]
10pub enum Signal {
11 Abrt,
13 Alrm,
15 Bus,
17 Chld,
19 Cont,
21 Fpe,
23 Hup,
25 Ill,
27 Int,
29 Kill,
31 Pipe,
33 Quit,
35 Segv,
37 Stop,
39 Term,
41 Tstp,
43 Ttin,
45 Ttou,
47 Usr1,
49 Usr2,
51 #[cfg(not(target_os = "macos"))]
53 Poll,
54 Prof,
56 Sys,
58 Trap,
60 Urg,
62 VtAlrm,
64 XCpu,
66 XFsz,
68}
69
70impl TryFrom<libc::c_int> for Signal {
71 type Error = io::Error;
72
73 fn try_from(value: libc::c_int) -> io::Result<Self> {
74 match value {
75 libc::SIGABRT => Ok(Signal::Abrt),
76 libc::SIGALRM => Ok(Signal::Alrm),
77 libc::SIGBUS => Ok(Signal::Bus),
78 libc::SIGCHLD => Ok(Signal::Chld),
79 libc::SIGCONT => Ok(Signal::Cont),
80 libc::SIGFPE => Ok(Signal::Fpe),
81 libc::SIGHUP => Ok(Signal::Hup),
82 libc::SIGILL => Ok(Signal::Ill),
83 libc::SIGINT => Ok(Signal::Int),
84 libc::SIGKILL => Ok(Signal::Kill),
85 libc::SIGPIPE => Ok(Signal::Pipe),
86 libc::SIGQUIT => Ok(Signal::Quit),
87 libc::SIGSEGV => Ok(Signal::Segv),
88 libc::SIGSTOP => Ok(Signal::Stop),
89 libc::SIGTERM => Ok(Signal::Term),
90 libc::SIGTSTP => Ok(Signal::Tstp),
91 libc::SIGTTIN => Ok(Signal::Ttin),
92 libc::SIGTTOU => Ok(Signal::Ttou),
93 libc::SIGUSR1 => Ok(Signal::Usr1),
94 libc::SIGUSR2 => Ok(Signal::Usr2),
95 #[cfg(not(target_os = "macos"))]
96 libc::SIGPOLL => Ok(Signal::Poll),
97 libc::SIGPROF => Ok(Signal::Prof),
98 libc::SIGSYS => Ok(Signal::Sys),
99 libc::SIGTRAP => Ok(Signal::Trap),
100 libc::SIGURG => Ok(Signal::Urg),
101 libc::SIGVTALRM => Ok(Signal::VtAlrm),
102 libc::SIGXCPU => Ok(Signal::XCpu),
103 libc::SIGXFSZ => Ok(Signal::XFsz),
104 _ => Err(io::Error::from(io::ErrorKind::InvalidInput)),
105 }
106 }
107}
108
109impl From<Signal> for libc::c_int {
110 fn from(signal: Signal) -> Self {
111 match signal {
112 Signal::Abrt => libc::SIGABRT,
113 Signal::Alrm => libc::SIGALRM,
114 Signal::Bus => libc::SIGBUS,
115 Signal::Chld => libc::SIGCHLD,
116 Signal::Cont => libc::SIGCONT,
117 Signal::Fpe => libc::SIGFPE,
118 Signal::Hup => libc::SIGHUP,
119 Signal::Ill => libc::SIGILL,
120 Signal::Int => libc::SIGINT,
121 Signal::Kill => libc::SIGKILL,
122 Signal::Pipe => libc::SIGPIPE,
123 Signal::Quit => libc::SIGQUIT,
124 Signal::Segv => libc::SIGSEGV,
125 Signal::Stop => libc::SIGSTOP,
126 Signal::Term => libc::SIGTERM,
127 Signal::Tstp => libc::SIGTSTP,
128 Signal::Ttin => libc::SIGTTIN,
129 Signal::Ttou => libc::SIGTTOU,
130 Signal::Usr1 => libc::SIGUSR1,
131 Signal::Usr2 => libc::SIGUSR2,
132 #[cfg(not(target_os = "macos"))]
133 Signal::Poll => libc::SIGPOLL,
134 Signal::Prof => libc::SIGPROF,
135 Signal::Sys => libc::SIGSYS,
136 Signal::Trap => libc::SIGTRAP,
137 Signal::Urg => libc::SIGURG,
138 Signal::VtAlrm => libc::SIGVTALRM,
139 Signal::XCpu => libc::SIGXCPU,
140 Signal::XFsz => libc::SIGXFSZ,
141 }
142 }
143}