use core::fmt;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum IpcError {
SystemError(i32),
InvalidArgument,
AlreadyExists,
EndpointInUse,
NotFound,
PermissionDenied,
}
impl fmt::Display for IpcError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
IpcError::SystemError(code) => write!(f, "System error: {code}"),
IpcError::InvalidArgument => write!(f, "Invalid argument"),
IpcError::AlreadyExists => write!(f, "Segment already exists"),
IpcError::EndpointInUse => write!(f, "Queue endpoint already in use"),
IpcError::NotFound => write!(f, "Resource not found"),
IpcError::PermissionDenied => write!(f, "Permission denied"),
}
}
}
impl core::error::Error for IpcError {}
#[cfg(any(unix, windows))]
pub fn last_os_error() -> IpcError {
let code = std::io::Error::last_os_error()
.raw_os_error()
.expect("invariant: last_os_error captures a raw operating-system error code");
IpcError::SystemError(code)
}