firefly_rust/
misc.rs

1use crate::net::Peer;
2
3/// Log a debug message.
4pub 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
12/// Log an error message.
13pub 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
21/// Set the random seed.
22pub fn set_seed(seed: u32) {
23    unsafe {
24        bindings::set_seed(seed);
25    }
26}
27
28/// Get a random value.
29#[must_use]
30pub fn get_random() -> u32 {
31    unsafe { bindings::get_random() }
32}
33
34/// Get the Peer's name.
35#[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
51/// Exit the app after the current update is finished.
52pub 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}