{-# LANGUAGE ForeignFunctionInterface, JavaScriptFFI, DeriveDataTypeable,
UnboxedTuples, GHCForeignImportPrim, UnliftedFFITypes,
MagicHash
#-}
module JavaScript.Web.MessageEvent ( MessageEvent
, getData
, MessageEventData(..)
) where
import GHCJS.Types
import GHC.Exts
import Data.Typeable
import JavaScript.Web.MessageEvent.Internal
import JavaScript.Web.Blob.Internal (Blob, SomeBlob(..))
import JavaScript.TypedArray.ArrayBuffer.Internal (ArrayBuffer, SomeArrayBuffer(..))
import Data.JSString.Internal.Type (JSString(..))
data MessageEventData = StringData JSString
| BlobData Blob
| ArrayBufferData ArrayBuffer
deriving (Typeable)
getData :: MessageEvent -> MessageEventData
getData me = case js_getData me of
(# 1#, r #) -> StringData (JSString r)
(# 2#, r #) -> BlobData (SomeBlob r)
(# 3#, r #) -> ArrayBufferData (SomeArrayBuffer r)
{-# INLINE getData #-}
foreign import javascript unsafe
"$r2 = $1.data;\
\$r1 = typeof $r2 === 'string' ? 1 : ($r2 instanceof ArrayBuffer ? 3 : 2)"
js_getData :: MessageEvent -> (# Int#, JSVal #)