multiversx_chain_vm/host/vm_hooks/vh_handler/
vh_error.rs1use multiversx_chain_core::types::ReturnCode;
2use multiversx_chain_vm_executor::VMHooksEarlyExit;
3
4use crate::{
5 host::vm_hooks::{vh_early_exit::early_exit_vm_error, VMHooksContext},
6 types::RawHandle,
7};
8
9use super::VMHooksHandler;
10
11impl<C: VMHooksContext> VMHooksHandler<C> {
12 pub fn signal_error(&mut self, message: &[u8]) -> Result<(), VMHooksEarlyExit> {
13 match String::from_utf8(message.to_owned()) {
14 Ok(message_string) => {
15 self.error_trace(&message_string);
16 Err(VMHooksEarlyExit::new(ReturnCode::UserError.as_u64())
17 .with_message(message_string))
18 }
19 Err(_) => Err(early_exit_vm_error("error message utf-8 error")),
20 }
21 }
22
23 pub fn signal_error_from_buffer(
24 &mut self,
25 message_handle: RawHandle,
26 ) -> Result<(), VMHooksEarlyExit> {
27 let bytes = self.context.m_types_lock().mb_get_owned(message_handle);
28 self.signal_error(&bytes)
29 }
30}