{-# LANGUAGE PatternSynonyms #-}
-- For HasCallStack compatibility
{-# LANGUAGE ImplicitParams, ConstraintKinds, KindSignatures #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
module JSDOM.Generated.Blob
       (newBlob, slice, slice_, getSize, getType, Blob(..), gTypeBlob,
        IsBlob, toBlob)
       where
import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, realToFrac, fmap, Show, Read, Eq, Ord, Maybe(..))
import qualified Prelude (error)
import Data.Typeable (Typeable)
import Data.Traversable (mapM)
import Language.Javascript.JSaddle (JSM(..), JSVal(..), JSString, strictEqual, toJSVal, valToStr, valToNumber, valToBool, js, jss, jsf, jsg, function, asyncFunction, new, array, jsUndefined, (!), (!!))
import Data.Int (Int64)
import Data.Word (Word, Word64)
import JSDOM.Types
import Control.Applicative ((<$>))
import Control.Monad (void)
import Control.Lens.Operators ((^.))
import JSDOM.EventTargetClosures (EventName, unsafeEventName, unsafeEventNameAsync)
import JSDOM.Enums

-- | <https://developer.mozilla.org/en-US/docs/Web/API/Blob Mozilla Blob documentation> 
newBlob ::
        (MonadDOM m, IsBlobPart blobParts, IsBlobPropertyBag options) =>
          [blobParts] -> Maybe options -> m Blob
newBlob :: forall (m :: * -> *) blobParts options.
(MonadDOM m, IsBlobPart blobParts, IsBlobPropertyBag options) =>
[blobParts] -> Maybe options -> m Blob
newBlob [blobParts]
blobParts Maybe options
options
  = DOM Blob -> m Blob
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (JSVal -> Blob
Blob (JSVal -> Blob) -> JSM JSVal -> DOM Blob
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
         JSM JSVal -> [JSM JSVal] -> JSM JSVal
forall constructor args.
(MakeObject constructor, MakeArgs args) =>
constructor -> args -> JSM JSVal
new (String -> JSM JSVal
forall a. ToJSString a => a -> JSM JSVal
jsg String
"Blob") [JSM Object -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal ([blobParts] -> JSM Object
forall args. MakeArgs args => args -> JSM Object
array [blobParts]
blobParts), Maybe options -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe options
options])

-- | <https://developer.mozilla.org/en-US/docs/Web/API/Blob.slice Mozilla Blob.slice documentation> 
slice ::
      (MonadDOM m, IsBlob self, ToJSString contentType) =>
        self -> Maybe Int64 -> Maybe Int64 -> Maybe contentType -> m Blob
slice :: forall (m :: * -> *) self contentType.
(MonadDOM m, IsBlob self, ToJSString contentType) =>
self -> Maybe Int64 -> Maybe Int64 -> Maybe contentType -> m Blob
slice self
self Maybe Int64
start Maybe Int64
end Maybe contentType
contentType
  = DOM Blob -> m Blob
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (((self -> Blob
forall o. IsBlob o => o -> Blob
toBlob self
self) Blob -> Getting (JSM JSVal) Blob (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf String
"slice"
          [JSM JSVal -> (Int64 -> JSM JSVal) -> Maybe Int64 -> JSM JSVal
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (JSVal -> JSM JSVal
forall a. a -> JSM a
forall (m :: * -> *) a. Monad m => a -> m a
return JSVal
jsUndefined) Int64 -> JSM JSVal
forall a. Integral a => a -> JSM JSVal
integralToDoubleToJSVal Maybe Int64
start,
           JSM JSVal -> (Int64 -> JSM JSVal) -> Maybe Int64 -> JSM JSVal
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (JSVal -> JSM JSVal
forall a. a -> JSM a
forall (m :: * -> *) a. Monad m => a -> m a
return JSVal
jsUndefined) Int64 -> JSM JSVal
forall a. Integral a => a -> JSM JSVal
integralToDoubleToJSVal Maybe Int64
end,
           Maybe contentType -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe contentType
contentType])
         JSM JSVal -> (JSVal -> DOM Blob) -> DOM Blob
forall a b. JSM a -> (a -> JSM b) -> JSM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM Blob
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked)

-- | <https://developer.mozilla.org/en-US/docs/Web/API/Blob.slice Mozilla Blob.slice documentation> 
slice_ ::
       (MonadDOM m, IsBlob self, ToJSString contentType) =>
         self -> Maybe Int64 -> Maybe Int64 -> Maybe contentType -> m ()
slice_ :: forall (m :: * -> *) self contentType.
(MonadDOM m, IsBlob self, ToJSString contentType) =>
self -> Maybe Int64 -> Maybe Int64 -> Maybe contentType -> m ()
slice_ self
self Maybe Int64
start Maybe Int64
end Maybe contentType
contentType
  = DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (JSM JSVal -> DOM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void
         ((self -> Blob
forall o. IsBlob o => o -> Blob
toBlob self
self) Blob -> Getting (JSM JSVal) Blob (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf String
"slice"
            [JSM JSVal -> (Int64 -> JSM JSVal) -> Maybe Int64 -> JSM JSVal
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (JSVal -> JSM JSVal
forall a. a -> JSM a
forall (m :: * -> *) a. Monad m => a -> m a
return JSVal
jsUndefined) Int64 -> JSM JSVal
forall a. Integral a => a -> JSM JSVal
integralToDoubleToJSVal Maybe Int64
start,
             JSM JSVal -> (Int64 -> JSM JSVal) -> Maybe Int64 -> JSM JSVal
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (JSVal -> JSM JSVal
forall a. a -> JSM a
forall (m :: * -> *) a. Monad m => a -> m a
return JSVal
jsUndefined) Int64 -> JSM JSVal
forall a. Integral a => a -> JSM JSVal
integralToDoubleToJSVal Maybe Int64
end,
             Maybe contentType -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe contentType
contentType]))

-- | <https://developer.mozilla.org/en-US/docs/Web/API/Blob.size Mozilla Blob.size documentation> 
getSize :: (MonadDOM m, IsBlob self) => self -> m Word64
getSize :: forall (m :: * -> *) self.
(MonadDOM m, IsBlob self) =>
self -> m Word64
getSize self
self
  = DOM Word64 -> m Word64
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (Double -> Word64
forall b. Integral b => Double -> b
forall a b. (RealFrac a, Integral b) => a -> b
round (Double -> Word64) -> JSM Double -> DOM Word64
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (((self -> Blob
forall o. IsBlob o => o -> Blob
toBlob self
self) Blob -> Getting (JSM JSVal) Blob (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter Blob (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"size") JSM JSVal -> (JSVal -> JSM Double) -> JSM Double
forall a b. JSM a -> (a -> JSM b) -> JSM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> JSM Double
forall value. ToJSVal value => value -> JSM Double
valToNumber))

-- | <https://developer.mozilla.org/en-US/docs/Web/API/Blob.type Mozilla Blob.type documentation> 
getType ::
        (MonadDOM m, IsBlob self, FromJSString result) => self -> m result
getType :: forall (m :: * -> *) self result.
(MonadDOM m, IsBlob self, FromJSString result) =>
self -> m result
getType self
self
  = DOM result -> m result
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM (((self -> Blob
forall o. IsBlob o => o -> Blob
toBlob self
self) Blob -> Getting (JSM JSVal) Blob (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter Blob (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"type") JSM JSVal -> (JSVal -> DOM result) -> DOM result
forall a b. JSM a -> (a -> JSM b) -> JSM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM result
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked)