packages feed

ghcjs-websockets-0.3.0.1: src/JavaScript/Blob.hs

{-# LANGUAGE CPP #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LANGUAGE JavaScriptFFI #-}
{-# OPTIONS_HADDOCK hide #-}

module JavaScript.Blob (
    Blob
  , readBlob
  , isBlob
  ) where

import Control.Exception (mask_)
import Data.ByteString   (ByteString)
import GHCJS.Foreign     (bufferByteString)
import GHCJS.Types       (JSRef)


data Blob_
type Blob = JSRef Blob_

foreign import javascript interruptible  "var reader = new FileReader();\
                                          reader.addEventListener('loadend', function() {\
                                            $c(reader.result);\
                                          });\
                                          reader.readAsArrayBuffer($1);"
    ffi_readBlob :: Blob -> IO (JSRef a)

foreign import javascript unsafe "$1 instanceof Blob" ffi_blobCheck :: JSRef a -> IO Bool

readBlob :: Blob -> IO ByteString
readBlob b = bufferByteString 0 0 =<< mask_ (ffi_readBlob b)

isBlob :: JSRef a -> IO Bool
isBlob ref = ffi_blobCheck ref