mirror of
https://github.com/mii443/wasmer.git
synced 2025-12-07 13:18:20 +00:00
94 lines
2.9 KiB
Rust
94 lines
2.9 KiB
Rust
//! The WebAssembly possible errors
|
|
use crate::trap::RuntimeError;
|
|
use thiserror::Error;
|
|
use wasm_common::ExternType;
|
|
use wasmer_compiler::CompileError;
|
|
|
|
/// The Serialize error can occur when serializing a
|
|
/// compiled Module into a binary.
|
|
#[derive(Error, Debug)]
|
|
pub enum SerializeError {
|
|
/// A generic serialization error
|
|
#[error("{0}")]
|
|
Generic(String),
|
|
}
|
|
|
|
/// The Deserialize error can occur when loading a
|
|
/// compiled Module from a binary.
|
|
#[derive(Error, Debug)]
|
|
pub enum DeserializeError {
|
|
/// A generic deserialization error
|
|
#[error("{0}")]
|
|
Generic(String),
|
|
/// Incompatible serialized binary
|
|
#[error("incompatible binary: {0}")]
|
|
Incompatible(String),
|
|
/// The provided binary is corrupted
|
|
#[error("corrupted binary: {0}")]
|
|
CorruptedBinary(String),
|
|
/// The binary was valid, but we got an error when
|
|
/// trying to allocate the required resources.
|
|
#[error(transparent)]
|
|
Compiler(CompileError),
|
|
}
|
|
|
|
/// An ImportError.
|
|
///
|
|
/// Note: this error is not standard to WebAssembly, but it's
|
|
/// useful to determine the import issue on the API side.
|
|
#[derive(Error, Debug)]
|
|
pub enum ImportError {
|
|
/// Incompatible Import Type.
|
|
/// This error occurs when the import types mismatch.
|
|
#[error("incompatible import type. Expected {0:?} but received {1:?}")]
|
|
IncompatibleType(ExternType, ExternType),
|
|
|
|
/// Unknown Import.
|
|
/// This error occurs when an import was expected but not provided.
|
|
#[error("unknown import. Expected {0:?}")]
|
|
Unknown(ExternType),
|
|
}
|
|
|
|
/// The WebAssembly.LinkError object indicates an error during
|
|
/// module instantiation (besides traps from the start function).
|
|
///
|
|
/// This is based on the [link error][link-error] API.
|
|
///
|
|
/// [link-error]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/LinkError
|
|
#[derive(Error, Debug)]
|
|
#[error("Link error: {0}")]
|
|
pub enum LinkError {
|
|
/// A wasm translation error occured.
|
|
Generic(String),
|
|
|
|
/// An error occurred when checking the import types.
|
|
#[error("Error while importing {0:?}.{1:?}: {2}")]
|
|
Import(String, String, ImportError),
|
|
|
|
/// A trap ocurred during linking.
|
|
#[error("RuntimeError occurred during linking: {0}")]
|
|
Trap(#[source] RuntimeError),
|
|
|
|
/// Insufficient resources available for linking.
|
|
#[error("Insufficient resources: {0}")]
|
|
Resource(String),
|
|
}
|
|
|
|
/// An error while instantiating a module.
|
|
///
|
|
/// This is not a common WebAssembly error, however
|
|
/// we need to differentiate from a `LinkError` (an error
|
|
/// that happens while linking, on instantiation) and a
|
|
/// Trap that occurs when calling the WebAssembly module
|
|
/// start function.
|
|
#[derive(Error, Debug)]
|
|
pub enum InstantiationError {
|
|
/// A linking ocurred during instantiation.
|
|
#[error(transparent)]
|
|
Link(LinkError),
|
|
|
|
/// A runtime error occured while invoking the start function
|
|
#[error(transparent)]
|
|
Start(RuntimeError),
|
|
}
|