1extern crate codegen;
2pub use codegen::entrypoint;
3
4#[link(wasm_import_module = "_ipcs")]
5extern "C" {
6 pub fn _ipcs_arg_count() -> u32;
7 pub fn _ipcs_arg_len(i: u32) -> u32;
8 pub fn _ipcs_arg_read(i: u32, ptr: u32, offset: u32, len: u32) -> u32;
9 pub fn _ipcs_ret(ptr: u32, len: u32);
10}
11
12pub fn arg_count() -> u32 {
13 unsafe { _ipcs_arg_count() }
14}
15
16pub fn arg_buf(i: u32) -> Box<[u8]> {
17 unsafe {
18 let len = _ipcs_arg_len(i);
19 let mut vec: Vec<u8> = Vec::with_capacity(len as usize);
20 vec.resize(len as usize, 0);
21 let read = _ipcs_arg_read(i, vec.as_ptr() as _, 0, len);
22 assert!(read <= len, "Read invalid length");
23 vec.into_boxed_slice()
24 }
25}
26
27pub fn ret(data: &[u8]) {
28 unsafe {
29 _ipcs_ret(data.as_ptr() as u32, data.len() as u32);
30 }
31}