use serde::Serialize;
use wasm_bindgen::prelude::*;
#[derive(Debug, Clone, Serialize)]
pub struct ChatMessageEvent {
pub from: String,
pub timestamp: u64,
pub text: String,
}
#[derive(Debug, Clone, Serialize)]
pub struct PeerEvent {
pub peer_id: String,
pub event: String,
}
#[derive(Debug, Clone, Serialize)]
pub struct ConnectionEvent {
pub state: String,
pub error: Option<String>,
}
pub fn event_to_js<T: Serialize>(event: &T) -> Result<JsValue, JsValue> {
serde_wasm_bindgen::to_value(event).map_err(|e| JsValue::from_str(&e.to_string()))
}
pub fn invoke_callback(callback: &js_sys::Function, arg: JsValue) {
let _ = callback.call1(&JsValue::NULL, &arg);
}
pub fn invoke_callback_event<T: Serialize>(callback: &js_sys::Function, event: &T) {
if let Ok(js_event) = event_to_js(event) {
invoke_callback(callback, js_event);
}
}