1use crate::net::Peer;
2
3pub fn log_debug(t: &str) {
5 let ptr = t.as_ptr() as u32;
6 let len = t.len() as u32;
7 unsafe {
8 bindings::log_debug(ptr, len);
9 }
10}
11
12pub fn log_error(t: &str) {
14 let ptr = t.as_ptr() as u32;
15 let len = t.len() as u32;
16 unsafe {
17 bindings::log_error(ptr, len);
18 }
19}
20
21pub fn set_seed(seed: u32) {
23 unsafe {
24 bindings::set_seed(seed);
25 }
26}
27
28#[must_use]
30pub fn get_random() -> u32 {
31 unsafe { bindings::get_random() }
32}
33
34#[cfg(feature = "alloc")]
36#[must_use]
37pub fn get_name_buf(p: Peer) -> alloc::string::String {
38 let mut buf = [0u8; 16];
39 let name = get_name(p, &mut buf);
40 alloc::string::String::from(name)
41}
42
43#[must_use]
44pub fn get_name(p: Peer, buf: &mut [u8; 16]) -> &str {
45 let ptr = buf.as_ptr() as u32;
46 let len = unsafe { bindings::get_name(u32::from(p.0), ptr) };
47 let buf = &buf[..len as usize];
48 unsafe { core::str::from_utf8_unchecked(buf) }
49}
50
51pub fn quit() {
53 unsafe { bindings::quit() }
54}
55
56mod bindings {
57 #[link(wasm_import_module = "misc")]
58 extern "C" {
59 pub(crate) fn log_debug(ptr: u32, len: u32);
60 pub(crate) fn log_error(ptr: u32, len: u32);
61 pub(crate) fn set_seed(seed: u32);
62 pub(crate) fn get_random() -> u32;
63 pub(crate) fn get_name(idx: u32, ptr: u32) -> u32;
64 pub(crate) fn quit();
65 }
66}