radix_wasmi/
error.rs

1use super::errors::{
2    FuncError,
3    GlobalError,
4    InstantiationError,
5    LinkerError,
6    MemoryError,
7    ModuleError,
8    TableError,
9};
10use crate::core::Trap;
11use core::{fmt, fmt::Display};
12
13/// An error that may occur upon operating on Wasm modules or module instances.
14#[derive(Debug)]
15#[non_exhaustive]
16pub enum Error {
17    /// A global variable error.
18    Global(GlobalError),
19    /// A linear memory error.
20    Memory(MemoryError),
21    /// A table error.
22    Table(TableError),
23    /// A linker error.
24    Linker(LinkerError),
25    /// A module instantiation error.
26    Instantiation(InstantiationError),
27    /// A module compilation, validation and translation error.
28    Module(ModuleError),
29    /// A function error.
30    Func(FuncError),
31    /// A trap as defined by the WebAssembly specification.
32    Trap(Trap),
33}
34
35#[cfg(feature = "std")]
36impl std::error::Error for Error {}
37
38impl Display for Error {
39    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
40        match self {
41            Self::Trap(error) => Display::fmt(error, f),
42            Self::Global(error) => Display::fmt(error, f),
43            Self::Memory(error) => Display::fmt(error, f),
44            Self::Table(error) => Display::fmt(error, f),
45            Self::Linker(error) => Display::fmt(error, f),
46            Self::Func(error) => Display::fmt(error, f),
47            Self::Instantiation(error) => Display::fmt(error, f),
48            Self::Module(error) => Display::fmt(error, f),
49        }
50    }
51}
52
53impl From<Trap> for Error {
54    fn from(error: Trap) -> Self {
55        Self::Trap(error)
56    }
57}
58
59impl From<GlobalError> for Error {
60    fn from(error: GlobalError) -> Self {
61        Self::Global(error)
62    }
63}
64
65impl From<MemoryError> for Error {
66    fn from(error: MemoryError) -> Self {
67        Self::Memory(error)
68    }
69}
70
71impl From<TableError> for Error {
72    fn from(error: TableError) -> Self {
73        Self::Table(error)
74    }
75}
76
77impl From<LinkerError> for Error {
78    fn from(error: LinkerError) -> Self {
79        Self::Linker(error)
80    }
81}
82
83impl From<InstantiationError> for Error {
84    fn from(error: InstantiationError) -> Self {
85        Self::Instantiation(error)
86    }
87}
88
89impl From<ModuleError> for Error {
90    fn from(error: ModuleError) -> Self {
91        Self::Module(error)
92    }
93}
94
95impl From<FuncError> for Error {
96    fn from(error: FuncError) -> Self {
97        Self::Func(error)
98    }
99}