linera_wasmer/sys/
errors.rs

1use crate::{LinkError, RuntimeError};
2use wasmer_vm::Trap;
3
4impl From<wasmer_compiler::LinkError> for LinkError {
5    fn from(other: wasmer_compiler::LinkError) -> Self {
6        match other {
7            wasmer_compiler::LinkError::Import(namespace, name, error) => {
8                Self::Import(namespace, name, error)
9            }
10            wasmer_compiler::LinkError::Trap(e) => Self::Trap(e.into()),
11            wasmer_compiler::LinkError::Resource(e) => Self::Resource(e),
12        }
13    }
14}
15
16impl From<Trap> for RuntimeError {
17    fn from(trap: Trap) -> Self {
18        if trap.is::<Self>() {
19            return trap.downcast::<Self>().unwrap();
20        }
21        let (wasm_trace, trap_code) = wasmer_compiler::get_trace_and_trapcode(&trap);
22        Self::new_from_source(trap, wasm_trace, trap_code)
23    }
24}