blockless-sdk 0.2.3

blockless runtime sdk
Documentation
#[cfg(not(feature = "mock-ffi"))]
#[link(wasm_import_module = "blockless_memory")]
extern "C" {
    #[link_name = "memory_read"]
    pub(crate) fn memory_read(buf: *mut u8, len: u32, num: *mut u32) -> u32;
    #[link_name = "env_var_read"]
    pub(crate) fn env_var_read(buf: *mut u8, len: u32, num: *mut u32) -> u32;
}

#[cfg(feature = "mock-ffi")]
#[allow(unused_variables)]
mod mock_ffi {
    pub unsafe fn memory_read(buf: *mut u8, len: u32, num: *mut u32) -> u32 {
        unimplemented!()
    }

    pub unsafe fn env_var_read(buf: *mut u8, len: u32, num: *mut u32) -> u32 {
        unimplemented!()
    }
}

#[cfg(feature = "mock-ffi")]
use mock_ffi::*;

pub fn read_stdin(buf: &mut [u8]) -> std::io::Result<u32> {
    let mut len = 0;
    let errno = unsafe { memory_read(buf.as_mut_ptr(), buf.len() as _, &mut len) };
    if errno == 0 {
        return Ok(len);
    }
    let err = std::io::Error::from_raw_os_error(errno as i32);
    Err(err)
}

pub fn read_env_vars(buf: &mut [u8]) -> std::io::Result<u32> {
    let mut len = 0;
    let errno = unsafe { env_var_read(buf.as_mut_ptr(), buf.len() as _, &mut len) };
    if errno == 0 {
        return Ok(len);
    }
    let err = std::io::Error::from_raw_os_error(errno as i32);
    Err(err)
}