1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
//! The WebAssembly possible errors use crate::trap::RuntimeError; use std::io; use thiserror::Error; use wasmer_compiler::CompileError; use wasmer_types::ExternType; /// The Serialize error can occur when serializing a /// compiled Module into a binary. #[derive(Error, Debug)] pub enum SerializeError { /// An IO error #[error(transparent)] Io(#[from] io::Error), /// 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 { /// An IO error #[error(transparent)] Io(#[from] io::Error), /// 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:?}")] UnknownImport(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 { /// 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), }