use crate::AppError;
use crate::shutdown::{SHUTDOWN_EVENTS, ShutdownEventsLock};
use js_sys::Uint8Array;
use wasm_bindgen::prelude::{JsValue, wasm_bindgen};
static _SHUTDOWN_EVENTS: &ShutdownEventsLock = &SHUTDOWN_EVENTS;
pub fn start_rust_logic_real<F, T>(main_fn: F) -> Result<(), AppError>
where
F: Fn() -> T + 'static,
{
#[cfg(debug_assertions)]
{
use crate::debug_print;
use std::panic::set_hook;
set_hook(Box::new(|panic_info| {
debug_print!("A panic occurred in Rust.\n{}", panic_info);
}));
}
main_fn();
Ok(())
}
#[wasm_bindgen]
extern "C" {
#[wasm_bindgen(js_namespace = rinfBindings, catch)]
pub fn rinf_send_rust_signal_extern(
endpoint: &str,
message_bytes: Uint8Array,
binary: Uint8Array,
) -> Result<(), JsValue>;
}
pub fn send_rust_signal_real(
endpoint: &str,
message_bytes: Vec<u8>,
binary: Vec<u8>,
) -> Result<(), AppError> {
let result = rinf_send_rust_signal_extern(
endpoint,
Uint8Array::from(message_bytes.as_slice()),
Uint8Array::from(binary.as_slice()),
);
result.map_err(|_| AppError::NoBindings)
}