Skip to main content

ringkernel_core/resource/
error.rs

1//! Error types for resource management.
2
3use std::fmt;
4
5/// Resource-related errors.
6#[derive(Debug, Clone)]
7pub enum ResourceError {
8    /// Memory limit exceeded.
9    MemoryLimitExceeded {
10        /// Requested bytes.
11        requested: u64,
12        /// Current usage.
13        current: u64,
14        /// Maximum limit.
15        max: u64,
16    },
17    /// Insufficient system memory.
18    InsufficientSystemMemory {
19        /// Requested bytes.
20        requested: u64,
21        /// Available bytes.
22        available: u64,
23        /// Safety margin.
24        margin: u64,
25    },
26    /// Resource allocation failed.
27    AllocationFailed(String),
28    /// Resource already reserved.
29    AlreadyReserved(String),
30}
31
32impl fmt::Display for ResourceError {
33    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
34        match self {
35            ResourceError::MemoryLimitExceeded {
36                requested,
37                current,
38                max,
39            } => {
40                write!(
41                    f,
42                    "Memory limit exceeded: requested {} bytes, current usage {} bytes, limit {} bytes",
43                    requested, current, max
44                )
45            }
46            ResourceError::InsufficientSystemMemory {
47                requested,
48                available,
49                margin,
50            } => {
51                write!(
52                    f,
53                    "Insufficient system memory: requested {} bytes, available {} bytes (margin: {} bytes)",
54                    requested, available, margin
55                )
56            }
57            ResourceError::AllocationFailed(msg) => {
58                write!(f, "Resource allocation failed: {}", msg)
59            }
60            ResourceError::AlreadyReserved(msg) => {
61                write!(f, "Resource already reserved: {}", msg)
62            }
63        }
64    }
65}
66
67impl std::error::Error for ResourceError {}
68
69/// Result type for resource operations.
70pub type ResourceResult<T> = Result<T, ResourceError>;