///|
/// https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent
#cfg(target="js")
type MessageEvent

///|
#cfg(target="js")
pub impl IsEvent for MessageEvent

///|
#cfg(target="js")
pub impl @js.Cast for MessageEvent with into(value) {
  value |> ffi_to_message_event |> y => { y.to_option() }
}

///|
#cfg(target="js")
pub impl @js.Cast for MessageEvent with from(value) {
  value |> js_identity
}

///|
#cfg(target="js")
pub extern "js" fn MessageEvent::get_data(self : Self) -> @js.Value = "(e) => e.data"

///|
#cfg(target="js")
pub fn MessageEvent::get_data_string(self : Self) -> String? {
  ffi_message_event_data_string(self).to_option()
}

///|
#cfg(target="js")
extern "js" fn ffi_message_event_data_string(
  event : MessageEvent,
) -> @js.Nullable[String] =
  #| (event) => typeof event.data === "string" ? event.data : null