use std::sync::Arc;
use parking_lot::Mutex;
use crate::{memory_interop::copy_bytes_into_host, runtime};
#[derive(Clone)]
pub struct TransformResultHostEnvironment {
pub transform_result: Arc<Mutex<Vec<u8>>>,
}
impl TransformResultHostEnvironment {
pub fn new(transform_result: &Arc<Mutex<Vec<u8>>>) -> TransformResultHostEnvironment {
TransformResultHostEnvironment {
transform_result: transform_result.clone(),
}
}
}
#[tracing::instrument(level = "info", skip_all)]
pub fn set_transform_result(
caller: &mut dyn runtime::Caller<'_>,
env: &TransformResultHostEnvironment,
bytes_ptr: i32,
bytes_ptr_len: i32,
) {
let mut buf = env.transform_result.lock();
copy_bytes_into_host(caller, bytes_ptr, bytes_ptr_len, &mut buf);
}