use thiserror::Error;
#[derive(Debug, Error)]
pub enum AfterburnerError {
#[error("compile failed: {0}")]
CompileFailed(String),
#[error("script not found (hash mismatch or extinguished)")]
ScriptNotFound,
#[error("fuel exhausted")]
FuelExhausted,
#[error("memory limit exceeded")]
MemoryLimit,
#[error("execution timed out")]
Timeout,
#[error("wasm trap: {0}")]
WasmTrap(String),
#[error("serialization error: {0}")]
Serialize(#[from] serde_json::Error),
#[error("script output exceeded {limit} byte ceiling (raise FuelGauge::output_bytes)")]
OutputTooLarge { limit: usize },
#[error(
"script returned {len} raw bytes; use run_out / run_raw_out (OutputValue) to receive them"
)]
UnexpectedRawOutput { len: usize },
#[error("host error: {0}")]
Host(String),
#[error("permission denied: {0}")]
PermissionDenied(String),
#[error("rate limited (tenant={tenant:?}, retry after {retry_after_ms}ms)")]
RateLimited {
tenant: Option<u32>,
retry_after_ms: u64,
},
#[error("engine overloaded (in-flight cap reached)")]
Overloaded,
#[error("process.exit({0})")]
ProcessExit(i32),
#[error("engine error: {0}")]
Engine(String),
}
pub type Result<T> = core::result::Result<T, AfterburnerError>;