1use thiserror::Error;
4
5#[derive(Debug, Error)]
7pub enum ResourceError {
8 #[error("Memory allocation failed: requested {requested} bytes, available {available} bytes")]
10 MemoryAllocationFailed {
11 requested: usize,
13 available: usize,
15 },
16
17 #[error("Memory limit exceeded: {used} bytes used, limit is {limit} bytes")]
19 MemoryLimitExceeded {
20 used: usize,
22 limit: usize,
24 },
25
26 #[error("Fuel exhausted: consumed {consumed} units, limit was {limit} units")]
28 FuelExhausted {
29 consumed: u64,
31 limit: u64,
33 },
34
35 #[error("Refuel denied: {reason}")]
37 RefuelDenied {
38 reason: String,
40 },
41
42 #[error("Execution timeout after {elapsed:?}, limit was {limit:?}")]
44 Timeout {
45 elapsed: std::time::Duration,
47 limit: std::time::Duration,
49 },
50
51 #[error("Stack overflow")]
53 StackOverflow,
54
55 #[error("Table size exceeded: {current} elements, limit is {limit} elements")]
57 TableSizeExceeded {
58 current: u32,
60 limit: u32,
62 },
63
64 #[error("Epoch-based interruption is disabled in the engine configuration")]
66 EpochsDisabled,
67
68 #[error("Fuel consumption is disabled in the engine configuration")]
70 FuelDisabled,
71
72 #[error("Failed to spawn thread: {0}")]
74 ThreadSpawnFailed(String),
75
76 #[error("Invalid resource configuration: {0}")]
78 InvalidConfig(String),
79}
80
81pub type ResourceResult<T> = std::result::Result<T, ResourceError>;