{-# LANGUAGE ForeignFunctionInterface #-}
{-# LANGUAGE JavaScriptFFI #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE EmptyDataDecls #-}
module JavaScript.Web.Blob.Internal where
import Data.Typeable
import GHCJS.Types
data BlobType = BlobTypeBlob
| BlobTypeFile
newtype SomeBlob (a :: BlobType) = SomeBlob JSVal deriving Typeable
type File = SomeBlob BlobTypeFile
type Blob = SomeBlob BlobTypeBlob
size :: SomeBlob a -> Int
size b = js_size b
{-# INLINE size #-}
contentType :: SomeBlob a -> JSString
contentType b = js_type b
{-# INLINE contentType #-}
slice :: Int -> Int -> JSString -> SomeBlob a -> SomeBlob a
slice start end contentType b = js_slice start end contentType b
{-# INLINE slice #-}
isClosed :: SomeBlob a -> IO Bool
isClosed b = js_isClosed b
{-# INLINE isClosed #-}
close :: SomeBlob a -> IO ()
close b = js_close b
{-# INLINE close #-}
foreign import javascript unsafe "$1.size" js_size :: SomeBlob a -> Int
foreign import javascript unsafe "$1.type" js_type :: SomeBlob a -> JSString
foreign import javascript unsafe "$4.slice($1,$2,$3)"
js_slice :: Int -> Int -> JSString -> SomeBlob a -> SomeBlob a
foreign import javascript unsafe "$1.isClosed"
js_isClosed :: SomeBlob a -> IO Bool
foreign import javascript unsafe "$1.close();"
js_close :: SomeBlob a -> IO ()