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

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

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