use js_sys::{ArrayBuffer, Uint8Array};
use wasm_bindgen::JsCast;
use web_sys::{Blob, MessageEvent};
use crate::message::Message;
use crate::wasm::Error;
impl TryFrom<MessageEvent> for Message {
type Error = Error;
fn try_from(evt: MessageEvent) -> Result<Self, Self::Error> {
match evt.data() {
d if d.is_instance_of::<ArrayBuffer>() => {
Ok(Message::Binary(Uint8Array::new(d.unchecked_ref()).to_vec()))
}
d if d.is_string() => match d.as_string() {
Some(text) => Ok(Message::Text(text)),
None => Err(Error::InvalidEncoding),
},
d if d.is_instance_of::<Blob>() => Err(Error::CantDecodeBlob),
_ => Err(Error::UnknownDataType),
}
}
}