use thiserror::Error;
#[derive(Debug, Error)]
pub enum ResourceError {
#[error("Memory allocation failed: requested {requested} bytes, available {available} bytes")]
MemoryAllocationFailed {
requested: usize,
available: usize,
},
#[error("Memory limit exceeded: {used} bytes used, limit is {limit} bytes")]
MemoryLimitExceeded {
used: usize,
limit: usize,
},
#[error("Fuel exhausted: consumed {consumed} units, limit was {limit} units")]
FuelExhausted {
consumed: u64,
limit: u64,
},
#[error("Refuel denied: {reason}")]
RefuelDenied {
reason: String,
},
#[error("Execution timeout after {elapsed:?}, limit was {limit:?}")]
Timeout {
elapsed: std::time::Duration,
limit: std::time::Duration,
},
#[error("Stack overflow")]
StackOverflow,
#[error("Table size exceeded: {current} elements, limit is {limit} elements")]
TableSizeExceeded {
current: u32,
limit: u32,
},
#[error("Epoch-based interruption is disabled in the engine configuration")]
EpochsDisabled,
#[error("Fuel consumption is disabled in the engine configuration")]
FuelDisabled,
#[error("Failed to spawn thread: {0}")]
ThreadSpawnFailed(String),
#[error("Invalid resource configuration: {0}")]
InvalidConfig(String),
}
pub type ResourceResult<T> = std::result::Result<T, ResourceError>;