Skip to main content

moirai_core/ipc/
error.rs

1use core::fmt;
2
3/// IPC-specific error type to minimize dependencies
4#[derive(Debug, Clone)]
5pub enum IpcError {
6    /// System error with error code
7    SystemError(i32),
8    /// Invalid argument
9    InvalidArgument,
10    /// Resource not found
11    NotFound,
12    /// Permission denied
13    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/// Convert the calling thread's last operating-system error to `IpcError`.
30#[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}