{-# LANGUAGE PatternSynonyms #-}
-- For HasCallStack compatibility
{-# LANGUAGE ImplicitParams, ConstraintKinds, KindSignatures #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
module JSDOM.Generated.StorageUsageCallback
       (newStorageUsageCallback, newStorageUsageCallbackSync,
        newStorageUsageCallbackAsync, StorageUsageCallback)
       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/StorageUsageCallback Mozilla StorageUsageCallback documentation> 
newStorageUsageCallback ::
                        (MonadDOM m) =>
                          (Double -> Double -> JSM ()) -> m StorageUsageCallback
newStorageUsageCallback :: (Double -> Double -> JSM ()) -> m StorageUsageCallback
newStorageUsageCallback Double -> Double -> JSM ()
callback
  = DOM StorageUsageCallback -> m StorageUsageCallback
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (Callback (JSVal -> JSVal -> IO ()) -> StorageUsageCallback
StorageUsageCallback (Callback (JSVal -> JSVal -> IO ()) -> StorageUsageCallback)
-> (Function -> Callback (JSVal -> JSVal -> IO ()))
-> Function
-> StorageUsageCallback
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Function -> Callback (JSVal -> JSVal -> IO ())
forall a. Function -> Callback a
Callback (Function -> StorageUsageCallback)
-> JSM Function -> DOM StorageUsageCallback
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
         JSCallAsFunction -> JSM Function
function
           (\ JSVal
_ JSVal
_ [JSVal
currentUsageInBytes, JSVal
currentQuotaInBytes] ->
              JSVal -> JSM Double
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked JSVal
currentQuotaInBytes JSM Double -> (Double -> JSM ()) -> JSM ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=
                \ Double
currentQuotaInBytes' ->
                  JSVal -> JSM Double
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked JSVal
currentUsageInBytes JSM Double -> (Double -> JSM ()) -> JSM ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=
                    \ Double
currentUsageInBytes' -> Double -> Double -> JSM ()
callback Double
currentUsageInBytes'
                    Double
currentQuotaInBytes'))

-- | <https://developer.mozilla.org/en-US/docs/Web/API/StorageUsageCallback Mozilla StorageUsageCallback documentation> 
newStorageUsageCallbackSync ::
                            (MonadDOM m) =>
                              (Double -> Double -> JSM ()) -> m StorageUsageCallback
newStorageUsageCallbackSync :: (Double -> Double -> JSM ()) -> m StorageUsageCallback
newStorageUsageCallbackSync Double -> Double -> JSM ()
callback
  = DOM StorageUsageCallback -> m StorageUsageCallback
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (Callback (JSVal -> JSVal -> IO ()) -> StorageUsageCallback
StorageUsageCallback (Callback (JSVal -> JSVal -> IO ()) -> StorageUsageCallback)
-> (Function -> Callback (JSVal -> JSVal -> IO ()))
-> Function
-> StorageUsageCallback
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Function -> Callback (JSVal -> JSVal -> IO ())
forall a. Function -> Callback a
Callback (Function -> StorageUsageCallback)
-> JSM Function -> DOM StorageUsageCallback
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
         JSCallAsFunction -> JSM Function
function
           (\ JSVal
_ JSVal
_ [JSVal
currentUsageInBytes, JSVal
currentQuotaInBytes] ->
              JSVal -> JSM Double
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked JSVal
currentQuotaInBytes JSM Double -> (Double -> JSM ()) -> JSM ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=
                \ Double
currentQuotaInBytes' ->
                  JSVal -> JSM Double
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked JSVal
currentUsageInBytes JSM Double -> (Double -> JSM ()) -> JSM ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=
                    \ Double
currentUsageInBytes' -> Double -> Double -> JSM ()
callback Double
currentUsageInBytes'
                    Double
currentQuotaInBytes'))

-- | <https://developer.mozilla.org/en-US/docs/Web/API/StorageUsageCallback Mozilla StorageUsageCallback documentation> 
newStorageUsageCallbackAsync ::
                             (MonadDOM m) =>
                               (Double -> Double -> JSM ()) -> m StorageUsageCallback
newStorageUsageCallbackAsync :: (Double -> Double -> JSM ()) -> m StorageUsageCallback
newStorageUsageCallbackAsync Double -> Double -> JSM ()
callback
  = DOM StorageUsageCallback -> m StorageUsageCallback
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (Callback (JSVal -> JSVal -> IO ()) -> StorageUsageCallback
StorageUsageCallback (Callback (JSVal -> JSVal -> IO ()) -> StorageUsageCallback)
-> (Function -> Callback (JSVal -> JSVal -> IO ()))
-> Function
-> StorageUsageCallback
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Function -> Callback (JSVal -> JSVal -> IO ())
forall a. Function -> Callback a
Callback (Function -> StorageUsageCallback)
-> JSM Function -> DOM StorageUsageCallback
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
         JSCallAsFunction -> JSM Function
asyncFunction
           (\ JSVal
_ JSVal
_ [JSVal
currentUsageInBytes, JSVal
currentQuotaInBytes] ->
              JSVal -> JSM Double
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked JSVal
currentQuotaInBytes JSM Double -> (Double -> JSM ()) -> JSM ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=
                \ Double
currentQuotaInBytes' ->
                  JSVal -> JSM Double
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked JSVal
currentUsageInBytes JSM Double -> (Double -> JSM ()) -> JSM ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=
                    \ Double
currentUsageInBytes' -> Double -> Double -> JSM ()
callback Double
currentUsageInBytes'
                    Double
currentQuotaInBytes'))