#[must_use] #[non_exhaustive] #[derive(Debug, Clone, Copy, PartialEq, Eq)] #[repr(i64)] pub enum KernelError { SlotOccupied = -1, SlotEmpty = -2, InvalidObject = -3, InsufficientRights = -4, StaleGeneration = -5, PoolExhausted = -6, InvalidType = -7, InvalidSlot = -8, InvalidAddress = -9, WouldBlock = -10, ResourceExhausted = -11, #[allow(dead_code)] NotFound = -12, PermissionDenied = -13, BadState = -14, InvalidParameter = -15, NotInitialized = -16, IommuFault = -17, AlreadyExists = -18, } impl KernelError { pub const fn to_errno(self) -> i64 { self as i64 } } impl core::fmt::Display for KernelError { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { match self { Self::SlotOccupied => write!(f, "slot occupied"), Self::SlotEmpty => write!(f, "slot empty"), Self::InvalidObject => write!(f, "invalid object"), Self::InsufficientRights => write!(f, "insufficient rights"), Self::StaleGeneration => write!(f, "stale generation"), Self::PoolExhausted => write!(f, "pool exhausted"), Self::InvalidType => write!(f, "invalid type"), Self::InvalidSlot => write!(f, "invalid slot"), Self::InvalidAddress => write!(f, "invalid address"), Self::WouldBlock => write!(f, "would block"), Self::ResourceExhausted => write!(f, "resource exhausted"), Self::NotFound => write!(f, "not found"), Self::PermissionDenied => write!(f, "permission denied"), Self::BadState => write!(f, "bad state"), Self::InvalidParameter => write!(f, "invalid parameter"), Self::NotInitialized => write!(f, "not initialized"), Self::IommuFault => write!(f, "iommu fault"), Self::AlreadyExists => write!(f, "already exists"), } } } impl From for i64 { fn from(e: KernelError) -> Self { e.to_errno() } }