use std::fmt;
#[derive(Debug, Clone)]
pub enum ResourceError {
MemoryLimitExceeded {
requested: u64,
current: u64,
max: u64,
},
InsufficientSystemMemory {
requested: u64,
available: u64,
margin: u64,
},
AllocationFailed(String),
AlreadyReserved(String),
}
impl fmt::Display for ResourceError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
ResourceError::MemoryLimitExceeded {
requested,
current,
max,
} => {
write!(
f,
"Memory limit exceeded: requested {} bytes, current usage {} bytes, limit {} bytes",
requested, current, max
)
}
ResourceError::InsufficientSystemMemory {
requested,
available,
margin,
} => {
write!(
f,
"Insufficient system memory: requested {} bytes, available {} bytes (margin: {} bytes)",
requested, available, margin
)
}
ResourceError::AllocationFailed(msg) => {
write!(f, "Resource allocation failed: {}", msg)
}
ResourceError::AlreadyReserved(msg) => {
write!(f, "Resource already reserved: {}", msg)
}
}
}
}
impl std::error::Error for ResourceError {}
pub type ResourceResult<T> = Result<T, ResourceError>;