use thiserror::Error;
#[derive(Error, Debug)]
pub enum WasmError {
#[error("Invalid input WebAssembly code at offset {offset}: {message}")]
InvalidWebAssembly {
message: String,
offset: usize,
},
#[error("Unsupported feature: {0}")]
Unsupported(String),
#[error("Implementation limit exceeded")]
ImplLimitExceeded,
#[error("User error: {0}")]
User(String),
}
#[macro_export]
macro_rules! wasm_unsupported {
($($arg:tt)*) => { $crate::WasmError::Unsupported(format!($($arg)*)) }
}
impl From<wasmparser::BinaryReaderError> for WasmError {
fn from(e: wasmparser::BinaryReaderError) -> Self {
Self::InvalidWebAssembly {
message: e.message().into(),
offset: e.offset(),
}
}
}
pub type WasmResult<T> = Result<T, WasmError>;