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#[derive(Debug)]
15#[non_exhaustive]
16pub enum Error {
17 Global(GlobalError),
19 Memory(MemoryError),
21 Table(TableError),
23 Linker(LinkerError),
25 Instantiation(InstantiationError),
27 Module(ModuleError),
29 Func(FuncError),
31 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}