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