use snafu::Snafu;
pub type Result<T, E = Error> = std::result::Result<T, E>;
#[derive(Debug, Snafu)]
#[snafu(visibility(pub))]
pub enum Error {
#[snafu(display("Codegen error: {source}"))]
Codegen { source: svod_codegen::Error },
#[snafu(display("JIT compilation failed: {reason}"))]
JitCompilation { reason: String },
#[snafu(display("Function '{name}' not found in module"))]
FunctionNotFound { name: String },
#[snafu(display("Buffer allocation failed: {reason}"))]
BufferAllocation { reason: String },
#[snafu(display("Invalid buffer size: {size}"))]
InvalidBufferSize { size: usize },
#[snafu(display("Execution error: {reason}"))]
Execution { reason: String },
#[snafu(display("LLVM error: {reason}"))]
LlvmError { reason: String },
#[snafu(display("Unsupported device type: {device}"))]
UnsupportedDevice { device: String },
#[snafu(display("Unsupported runtime feature {kind}: {reason}"))]
Unsupported { kind: String, reason: String },
#[snafu(display("Device error: {source}"))]
Device { source: svod_device::Error },
}
impl From<svod_device::Error> for Error {
fn from(source: svod_device::Error) -> Self {
Error::Device { source }
}
}