use alloc::string::String;
use core::fmt;
#[derive(Debug)]
pub enum WasmError {
InvalidWebAssembly {
message: String,
offset: usize,
},
Unsupported(String),
ImplLimitExceeded,
User(String),
}
#[macro_export]
macro_rules! wasm_unsupported {
($($arg:tt)*) => { $crate::WasmError::Unsupported($crate::__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>;
impl fmt::Display for WasmError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
WasmError::InvalidWebAssembly { message, offset } => {
write!(
f,
"Invalid input WebAssembly code at offset {offset}: {message}"
)
}
WasmError::Unsupported(s) => {
write!(f, "Unsupported feature: {s}")
}
WasmError::ImplLimitExceeded => {
write!(f, "Implementation limit exceeded")
}
WasmError::User(s) => {
write!(f, "User error: {s}")
}
}
}
}
#[cfg(feature = "std")]
impl std::error::Error for WasmError {}