1use core::fmt;
2
3#[derive(Debug, Clone)]
5pub enum IpcError {
6 SystemError(i32),
8 InvalidArgument,
10 NotFound,
12 PermissionDenied,
14}
15
16impl fmt::Display for IpcError {
17 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
18 match self {
19 IpcError::SystemError(code) => write!(f, "System error: {code}"),
20 IpcError::InvalidArgument => write!(f, "Invalid argument"),
21 IpcError::NotFound => write!(f, "Resource not found"),
22 IpcError::PermissionDenied => write!(f, "Permission denied"),
23 }
24 }
25}
26
27impl core::error::Error for IpcError {}
28
29#[cfg(any(unix, windows))]
31pub fn last_os_error() -> IpcError {
32 let code = std::io::Error::last_os_error()
33 .raw_os_error()
34 .expect("invariant: last_os_error captures a raw operating-system error code");
35 IpcError::SystemError(code)
36}