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("Unsupported operation: {op:?}"))]
UnsupportedOp { op: String },
#[snafu(display("Invalid UOp graph: {reason}"))]
InvalidGraph { reason: String },
#[snafu(display("Type error: {reason}"))]
TypeError { reason: String },
#[snafu(display("LLVM error: {reason}"))]
LlvmError { reason: String },
#[snafu(display("Missing {what}"))]
Missing { what: String },
#[snafu(display("Invalid configuration: {reason}"))]
InvalidConfig { reason: String },
#[snafu(display("MLIR error: {reason}"))]
MlirError { reason: String },
#[snafu(display("IR error: {source}"))]
IrError {
#[snafu(source)]
source: morok_ir::Error,
},
}