use types::{address::VirtualAddress, bounded::CapSlot, permission::Permission}; pub enum Fault { CapabilityViolation { slot: CapSlot, needed: Permission }, InvalidCapability { slot: CapSlot }, RevokedCapability { slot: CapSlot }, InvalidSyscall, MemoryFault { address: VirtualAddress }, IllegalInstruction, } impl Fault { pub fn code(&self) -> usize { match self { Fault::CapabilityViolation { .. } => 0, Fault::InvalidCapability { .. } => 1, Fault::RevokedCapability { .. } => 2, Fault::InvalidSyscall => 3, Fault::MemoryFault { .. } => 4, Fault::IllegalInstruction => 5, } } pub fn address(&self) -> usize { match self { Fault::MemoryFault { address } => address.raw(), _ => 0, } } }