wasmer_c_api/wasm_c_api/
wat.rs1use super::types::wasm_byte_vec_t;
2
3#[cfg(feature = "wat")]
15#[unsafe(no_mangle)]
16pub unsafe extern "C" fn wat2wasm(wat: &wasm_byte_vec_t, out: &mut wasm_byte_vec_t) {
17 match wasmer_api::wat2wasm(wat.as_slice()) {
18 Ok(val) => out.set_buffer(val.into_owned()),
19 Err(err) => {
20 crate::error::update_last_error(err);
21 out.data = std::ptr::null_mut();
22 out.size = 0;
23 }
24 };
25}
26
27#[cfg(test)]
28mod tests {
29 #[cfg(not(target_os = "windows"))]
30 use inline_c::assert_c;
31 #[cfg(target_os = "windows")]
32 use wasmer_inline_c::assert_c;
33
34 #[test]
35 fn test_wat2wasm() {
36 (assert_c! {
37 #include "tests/wasmer.h"
38
39 int main() {
40 wasm_byte_vec_t wat;
41 wasmer_byte_vec_new_from_string(&wat, "(module)");
42 wasm_byte_vec_t wasm;
43 wat2wasm(&wat, &wasm);
44
45 assert(wasm.data);
46 assert(wasm.size == 8);
47 assert(
48 wasm.data[0] == 0 &&
49 wasm.data[1] == 'a' &&
50 wasm.data[2] == 's' &&
51 wasm.data[3] == 'm' &&
52 wasm.data[4] == 1 &&
53 wasm.data[5] == 0 &&
54 wasm.data[6] == 0 &&
55 wasm.data[7] == 0
56 );
57
58 wasm_byte_vec_delete(&wasm);
59 wasm_byte_vec_delete(&wat);
60
61 return 0;
62 }
63 })
64 .success();
65 }
66
67 #[test]
68 fn test_wat2wasm_failed() {
69 (assert_c! {
70 #include "tests/wasmer.h"
71
72 int main() {
73 wasm_byte_vec_t wat;
74 wasmer_byte_vec_new_from_string(&wat, "(module");
75 wasm_byte_vec_t wasm;
76 wat2wasm(&wat, &wasm);
77
78 assert(!wasm.data);
79 assert(wasmer_last_error_length() > 0);
80
81 wasm_byte_vec_delete(&wat);
82
83 return 0;
84 }
85 })
86 .success();
87 }
88}