use crate::wasm_name_t; use anyhow::{anyhow, Error, Result}; #[repr(C)] pub struct wasmtime_error_t { error: Error, } wasmtime_c_api_macros::declare_own!(wasmtime_error_t); impl From for wasmtime_error_t { fn from(error: Error) -> wasmtime_error_t { wasmtime_error_t { error } } } pub(crate) fn handle_result( result: Result, ok: impl FnOnce(T), ) -> Option> { match result { Ok(value) => { ok(value); None } Err(error) => Some(Box::new(wasmtime_error_t { error })), } } pub(crate) fn bad_utf8() -> Option> { Some(Box::new(wasmtime_error_t { error: anyhow!("input was not valid utf-8"), })) } #[no_mangle] pub extern "C" fn wasmtime_error_message(error: &wasmtime_error_t, message: &mut wasm_name_t) { message.set_buffer(format!("{:?}", error.error).into_bytes()); }