/// this returns a value to the host in an exported function
pub fn send[T: ToJson](data: T) -> Unit {
@host.output_json_value(data.to_json())
}
/// Allocates a JSON object in the host memory and returns its pointer.
pub fn allocate[T: ToJson](obj: T) -> Int64 {
@host.log_info_str("serialized " + obj.to_json().stringify())
@host.allocate_string(obj.to_json().stringify()).offset
}
/// Finds an object in the host memory and deserializes it to the given type.
pub fn deserialize[T: @json.FromJson](ptr: Int64) -> T? {
let str = @host.find_memory(ptr).to_string()
let json: Result[Json, @json.ParseError] = @json.parse?(str)
match json {
Ok(json) => @json.from_json?(json).to_option()
Err(_) => None
}
}
fn getValue[T: @json.FromJson](ptr: Int64) -> T? {
let obj: @types.ConfigGet[T]? = deserialize(ptr);
match obj {
Some(v) => Some(v.value)
None => None
}
}