cardinal_wasm_plugins/
utils.rs1use crate::ExecutionContext;
2use cardinal_errors::internal::CardinalInternalError;
3use cardinal_errors::CardinalError;
4use cardinal_errors::CardinalError::InternalError;
5use wasmer::{FunctionEnvMut, MemoryView};
6
7pub(crate) fn with_mem_view<'a>(
8 ctx: &'a FunctionEnvMut<ExecutionContext>,
9) -> Result<MemoryView<'a>, CardinalError> {
10 let mem = ctx.data().memory().as_ref().ok_or_else(|| {
11 InternalError(CardinalInternalError::InvalidWasmModule(
12 "memory not set".into(),
13 ))
14 })?;
15 Ok(mem.view(ctx))
16}
17
18pub fn read_bytes(view: &MemoryView, ptr: i32, len: i32) -> Result<Vec<u8>, CardinalError> {
19 let mut buf = vec![0u8; len as usize];
20 view.read(ptr as u64, &mut buf)
21 .map_err(|e| InternalError(CardinalInternalError::InvalidWasmModule(e.to_string())))?;
22 Ok(buf)
23}
24
25pub fn write_bytes(view: &MemoryView, ptr: i32, data: &[u8]) -> Result<(), CardinalError> {
26 view.write(ptr as u64, data)
27 .map_err(|e| InternalError(CardinalInternalError::InvalidWasmModule(e.to_string())))
28}