linera_wasmer_compiler/translator/
error.rs

1use wasmer_types::{CompileError, WasmError};
2use wasmparser::BinaryReaderError;
3
4/// Return an `Err(WasmError::Unsupported(msg))` where `msg` the string built by calling `format!`
5/// on the arguments to this macro.
6#[macro_export]
7macro_rules! wasm_unsupported {
8    ($($arg:tt)*) => { wasmer_types::WasmError::Unsupported(format!($($arg)*)) }
9}
10
11///
12pub fn from_binaryreadererror_wasmerror(original: BinaryReaderError) -> WasmError {
13    WasmError::InvalidWebAssembly {
14        message: original.message().into(),
15        offset: original.offset(),
16    }
17}
18
19///
20#[allow(dead_code)]
21pub fn from_binaryreadererror_compileerror(original: BinaryReaderError) -> CompileError {
22    // BinaryReaderError -> WasmError -> CompileError
23    CompileError::Wasm(from_binaryreadererror_wasmerror(original))
24}
25
26#[cfg(test)]
27mod tests {
28    use super::*;
29    use wasmparser::BinaryReader;
30
31    #[test]
32    fn can_convert_binary_reader_error_to_wasm_error() {
33        let mut reader = BinaryReader::new(b"\0\0\0\0");
34        let binary_reader_error = reader.read_bytes(10).unwrap_err();
35        match from_binaryreadererror_wasmerror(binary_reader_error) {
36            WasmError::InvalidWebAssembly { message, offset } => {
37                assert_eq!(message, "unexpected end-of-file");
38                assert_eq!(offset, 0);
39            }
40            err => panic!("Unexpected error: {:?}", err),
41        }
42    }
43
44    #[test]
45    fn can_convert_binary_reader_error_to_compile_error() {
46        let mut reader = BinaryReader::new(b"\0\0\0\0");
47        let binary_reader_error = reader.read_bytes(10).unwrap_err();
48        match from_binaryreadererror_compileerror(binary_reader_error) {
49            CompileError::Wasm(WasmError::InvalidWebAssembly { message, offset }) => {
50                assert_eq!(message, "unexpected end-of-file");
51                assert_eq!(offset, 0);
52            }
53            err => panic!("Unexpected error: {:?}", err),
54        }
55    }
56}