use crate::events::Event;
use crate::prelude::*;
use wasm_bindgen::JsCast;
#[derive(Debug, PartialEq, Eq, Hash)]
pub struct MessageEvent {
pub(crate) id: Option<String>,
pub(crate) name: String,
pub(crate) data: String,
}
impl MessageEvent {
pub fn id(&self) -> &Option<String> {
&self.id
}
pub fn name(&self) -> &String {
&self.name
}
pub fn data(&self) -> &str {
self.data.as_ref()
}
pub fn into_string(self) -> String {
self.data
}
pub fn from_event(name: String, ev: Event) -> Self {
let ev = ev
.into_raw()
.dyn_into::<web_sys::MessageEvent>()
.unwrap_throw();
Self::from_raw(name, ev)
}
pub fn from_raw(name: String, ev: web_sys::MessageEvent) -> Self {
let id = ev.last_event_id();
let id = match id.len() {
0 => None,
_ => Some(id),
};
let data: js_sys::JsString = ev.data().into();
let data: String = data.into();
Self {
name,
data,
id,
}
}
}