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 use inline_c::assert_c;
30
31 #[test]
32 fn test_wat2wasm() {
33 (assert_c! {
34 #include "tests/wasmer.h"
35
36 int main() {
37 wasm_byte_vec_t wat;
38 wasmer_byte_vec_new_from_string(&wat, "(module)");
39 wasm_byte_vec_t wasm;
40 wat2wasm(&wat, &wasm);
41
42 assert(wasm.data);
43 assert(wasm.size == 8);
44 assert(
45 wasm.data[0] == 0 &&
46 wasm.data[1] == 'a' &&
47 wasm.data[2] == 's' &&
48 wasm.data[3] == 'm' &&
49 wasm.data[4] == 1 &&
50 wasm.data[5] == 0 &&
51 wasm.data[6] == 0 &&
52 wasm.data[7] == 0
53 );
54
55 wasm_byte_vec_delete(&wasm);
56 wasm_byte_vec_delete(&wat);
57
58 return 0;
59 }
60 })
61 .success();
62 }
63
64 #[test]
65 fn test_wat2wasm_failed() {
66 (assert_c! {
67 #include "tests/wasmer.h"
68
69 int main() {
70 wasm_byte_vec_t wat;
71 wasmer_byte_vec_new_from_string(&wat, "(module");
72 wasm_byte_vec_t wasm;
73 wat2wasm(&wat, &wasm);
74
75 assert(!wasm.data);
76 assert(wasmer_last_error_length() > 0);
77
78 wasm_byte_vec_delete(&wat);
79
80 return 0;
81 }
82 })
83 .success();
84 }
85}