web3api_wasm_rs/
env.rs

1use crate::invoke::InvokeFunction;
2use crate::malloc::alloc;
3
4#[link(wasm_import_module = "w3")]
5extern "C" {
6    // Load Env Variables
7    #[link_name = "__w3_load_env"]
8    pub fn __w3_load_env(environment_ptr: u32);
9
10    // Get Sanitized Env Arguments
11    #[link_name = "__w3_sanitize_env_args"]
12    pub fn __w3_sanitize_env_args(args_ptr: u32);
13
14    // Set Sanitized Env Result
15    #[link_name = "__w3_sanitize_env_result"]
16    pub fn __w3_sanitize_env_result(ptr: u32, len: u32);
17}
18
19pub fn w3_load_env(env_size: u32) -> Vec<u8> {
20    let env_size_ptr = alloc(env_size as usize);
21    let env_buf =
22        unsafe { Vec::from_raw_parts(env_size_ptr, env_size as usize, env_size as usize) };
23    unsafe { __w3_load_env(env_buf.as_ptr() as u32) };
24    env_buf
25}
26
27pub fn w3_sanitize_env(args_size: u32, func: InvokeFunction) {
28    let args_size_ptr = alloc(args_size as usize);
29    let args_buf =
30        unsafe { Vec::from_raw_parts(args_size_ptr, args_size as usize, args_size as usize) };
31    unsafe { __w3_sanitize_env_args(args_buf.as_ptr() as u32) };
32    let result = func(&args_buf);
33    let result_len = result.len() as u32;
34    unsafe { __w3_sanitize_env_result(result.as_ptr() as u32, result_len) };
35}