radix_wasm_instrument/utils/
errors.rs

1use alloc::string::String;
2use anyhow::{anyhow, Error};
3use core::ops::Range;
4use wasmparser::BinaryReaderError;
5
6// ModuleInfo errors
7#[derive(Clone, Debug)]
8pub enum ModuleInfoError {
9	WasmParserError(BinaryReaderError),
10	SectionAlreadyExists(u8),
11	SectionNotSupported(String),
12	TranslatorError(TranslatorError),
13	SectionRangeExceedsWasmLength { range: Range<usize>, wasm_len: usize },
14	TypeDoesNotExist(u32),
15	FunctionDoesNotExist(u32),
16	NoMemorySection,
17	ExportAlreadyExists(String),
18	CodeAndFuncSectionCntMismatch(u32, u32),
19}
20
21impl core::fmt::Display for ModuleInfoError {
22	fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
23		match self {
24			ModuleInfoError::WasmParserError(err) => {
25				write!(f, "WasmParserError(BinaryReaderError {{ {} }})", err)
26			},
27			_ => write!(f, "{:?}", self),
28		}
29	}
30}
31
32impl From<BinaryReaderError> for ModuleInfoError {
33	fn from(err: BinaryReaderError) -> ModuleInfoError {
34		ModuleInfoError::WasmParserError(err)
35	}
36}
37
38impl From<TranslatorError> for ModuleInfoError {
39	fn from(err: TranslatorError) -> ModuleInfoError {
40		ModuleInfoError::TranslatorError(err)
41	}
42}
43
44// Translator errors
45#[derive(Clone, Debug)]
46pub enum TranslatorError {
47	WasmParserError(BinaryReaderError),
48	NoMutationsApplicable,
49	Error(String),
50}
51
52impl From<BinaryReaderError> for TranslatorError {
53	fn from(err: BinaryReaderError) -> TranslatorError {
54		TranslatorError::WasmParserError(err)
55	}
56}
57
58// Auto-conversions for ModuleInfoError for anyhow::Error
59impl From<ModuleInfoError> for Error {
60	fn from(err: ModuleInfoError) -> Error {
61		anyhow!("{:?}", err)
62	}
63}
64
65// Auto-conversions for TranslatorError for anyhow::Error
66impl From<TranslatorError> for Error {
67	fn from(err: TranslatorError) -> Error {
68		anyhow!("{:?}", err)
69	}
70}