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

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

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