web3api_wasm_rs/
get_implementations.rs1use crate::{malloc::alloc, Context, Read, ReadDecoder};
2
3#[link(wasm_import_module = "w3")]
4extern "C" {
5 #[link_name = "__w3_getImplementations"]
6 pub fn __w3_getImplementations(uri_ptr: u32, uri_len: u32) -> bool;
7
8 #[link_name = "__w3_getImplementations_result_len"]
9 pub fn __w3_getImplementations_result_len() -> u32;
10
11 #[link_name = "__w3_getImplementations_result"]
12 pub fn __w3_getImplementations_result(ptr: u32);
13}
14
15pub fn w3_get_implementations(uri: &str) -> Vec<String> {
16 let success =
17 unsafe { __w3_getImplementations(uri.as_bytes().as_ptr() as u32, uri.len() as u32) };
18
19 if !success {
20 return vec![];
21 }
22
23 let result_len = unsafe { __w3_getImplementations_result_len() };
24 let result_len_ptr = alloc(result_len as usize);
25 let result_buffer =
26 unsafe { Vec::from_raw_parts(result_len_ptr, result_len as usize, result_len as usize) };
27 unsafe { __w3_getImplementations_result(result_buffer.as_ptr() as u32) };
28
29 let mut decoder = ReadDecoder::new(&result_buffer, Context::new());
32 decoder.context().push(
33 "__w3_getImplementations_result",
34 "Vec<String>",
35 "__w3_getImplementations successful",
36 );
37 decoder.read_array(|reader| reader.read_string()).unwrap()
38}