multiversx_chain_vm/vm_hooks/vh_handler/
vh_error.rs

1use multiversx_chain_core::types::ReturnCode;
2
3use crate::{types::RawHandle, vm_hooks::VMHooksHandlerSource};
4
5use super::VMHooksManagedTypes;
6
7pub trait VMHooksError: VMHooksHandlerSource {
8    fn signal_error(&self, message: &[u8]) -> ! {
9        // can sometimes help in tests
10        // run `clear & cargo test -- --nocapture` to see the output
11        println!("{}", std::str::from_utf8(message).unwrap());
12
13        self.halt_with_error(ReturnCode::UserError, std::str::from_utf8(message).unwrap())
14    }
15}
16
17pub trait VMHooksErrorManaged: VMHooksManagedTypes + VMHooksError {
18    fn signal_error_from_buffer(&self, message_handle: RawHandle) -> ! {
19        self.signal_error(self.m_types_lock().mb_get(message_handle))
20    }
21}