clique_wasm_sdk/
lib.rs

1extern crate alloc;
2
3use alloc::string::String;
4use alloc::vec;
5
6pub use clique_wasm_types::{val::Val, val_type::ValType};
7
8extern "C" {
9    fn console_log_internal(ptr: *const u8, len: usize);
10    fn get_param_len_internal(key_ptr: *const u8, key_len: usize) -> usize;
11    fn get_param_value_internal(key_ptr: *const u8, key_len: usize, value_ptr: *mut u8) -> i32;
12    fn set_output_internal(
13        key_ptr: *const u8,
14        key_len: usize,
15        value_ptr: *const u8,
16        value_len: usize,
17    ) -> i32;
18}
19
20pub fn console_log(message: &str) {
21    unsafe {
22        console_log_internal(message.as_ptr(), message.len());
23    }
24}
25
26pub fn get_param(key: &str) -> Result<Option<Val>, String> {
27    let bytes = unsafe {
28        let key_ptr = key.as_ptr();
29        let key_len = key.len();
30        let value_len = get_param_len_internal(key_ptr, key_len);
31        if value_len > 0 {
32            let mut value = vec![0u8; value_len];
33            let result = get_param_value_internal(key_ptr, key_len, value.as_mut_ptr());
34            if result == 1 {
35                Some(value)
36            } else {
37                None
38            }
39        } else {
40            None
41        }
42    };
43    if let Some(bytes) = bytes {
44        Ok(Some(Val::from_bytes(&bytes)?))
45    } else {
46        Ok(None)
47    }
48}
49
50pub fn set_output(key: &str, value: &Val) -> bool {
51    let value_bytes = value.to_bytes();
52    let result = unsafe {
53        set_output_internal(
54            key.as_ptr(),
55            key.len(),
56            value_bytes.as_ptr(),
57            value_bytes.len(),
58        )
59    };
60    result == 1
61}