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
use super::ReadError;
use crate::engine::TranslationError;
use alloc::boxed::Box;
use core::{
fmt,
fmt::{Debug, Display},
};
use wasmparser::BinaryReaderError as ParserError;
#[derive(Debug)]
pub enum ModuleError {
Read(ReadError),
Parser(ParserError),
Translation(TranslationError),
Unsupported { message: Box<str> },
}
impl ModuleError {
pub(crate) fn unsupported(definition: impl Debug) -> Self {
Self::Unsupported {
message: format!("{:?}", definition).into(),
}
}
}
impl Display for ModuleError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
ModuleError::Read(error) => Display::fmt(error, f),
ModuleError::Parser(error) => Display::fmt(error, f),
ModuleError::Translation(error) => Display::fmt(error, f),
ModuleError::Unsupported { message } => {
write!(
f,
"encountered unsupported Wasm proposal item: {:?}",
message
)
}
}
}
}
impl From<ReadError> for ModuleError {
fn from(error: ReadError) -> Self {
Self::Read(error)
}
}
impl From<ParserError> for ModuleError {
fn from(error: ParserError) -> Self {
Self::Parser(error)
}
}
impl From<TranslationError> for ModuleError {
fn from(error: TranslationError) -> Self {
Self::Translation(error)
}
}