Skip to main content

dlang/immix/
errors.rs

1use super::size::SizeClassError;
2
3#[derive(Debug, PartialEq, Clone)]
4pub enum BlockError {
5    /// block size is not a power of two
6    BadSize(usize),
7    /// Cannot allocate memory
8    OutOfMemory,
9    /// Cannot allocate in block
10    NoSpaceForAllocation,
11    /// Address have overflow
12    AddressOverflow,
13}
14
15#[derive(Debug, PartialEq, Clone)]
16pub enum AllocError {
17    /// Cannot allocate memory
18    OutOfMemory,
19    /// Size is too big to allocate
20    SizeTooBig,
21    /// Wrapper for block error
22    InternalError(BlockError),
23}
24
25impl From<SizeClassError> for AllocError {
26    fn from(value: SizeClassError) -> Self {
27        match value {
28            SizeClassError::TooBig => AllocError::SizeTooBig,
29        }
30    }
31}
32
33impl From<BlockError> for AllocError {
34    fn from(value: BlockError) -> Self {
35        AllocError::InternalError(value)
36    }
37}
38
39#[derive(Debug, PartialEq, Clone)]
40pub enum ImmixError {
41    /// Key already exist
42    DuplicatedKey,
43    /// Wrapper for alloc error
44    InternalError(AllocError),
45}
46
47impl From<AllocError> for ImmixError {
48    fn from(value: AllocError) -> Self {
49        ImmixError::InternalError(value)
50    }
51}