{-# LANGUAGE PatternSynonyms #-}
-- For HasCallStack compatibility
{-# LANGUAGE ImplicitParams, ConstraintKinds, KindSignatures #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
module JSDOM.Generated.IDBVersionChangeEvent
       (newIDBVersionChangeEvent, getOldVersion, getNewVersion,
        getNewVersionUnsafe, getNewVersionUnchecked,
        IDBVersionChangeEvent(..), gTypeIDBVersionChangeEvent)
       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/IDBVersionChangeEvent Mozilla IDBVersionChangeEvent documentation> 
newIDBVersionChangeEvent ::
                         (MonadDOM m, ToJSString type') =>
                           type' -> Maybe IDBVersionChangeEventInit -> m IDBVersionChangeEvent
newIDBVersionChangeEvent :: forall (m :: * -> *) type'.
(MonadDOM m, ToJSString type') =>
type' -> Maybe IDBVersionChangeEventInit -> m IDBVersionChangeEvent
newIDBVersionChangeEvent type'
type' Maybe IDBVersionChangeEventInit
eventInitDict
  = DOM IDBVersionChangeEvent -> m IDBVersionChangeEvent
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (JSVal -> IDBVersionChangeEvent
IDBVersionChangeEvent (JSVal -> IDBVersionChangeEvent)
-> JSM JSVal -> DOM IDBVersionChangeEvent
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
"IDBVersionChangeEvent")
           [type' -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal type'
type', Maybe IDBVersionChangeEventInit -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe IDBVersionChangeEventInit
eventInitDict])

-- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBVersionChangeEvent.oldVersion Mozilla IDBVersionChangeEvent.oldVersion documentation> 
getOldVersion :: (MonadDOM m) => IDBVersionChangeEvent -> m Word64
getOldVersion :: forall (m :: * -> *).
MonadDOM m =>
IDBVersionChangeEvent -> m Word64
getOldVersion IDBVersionChangeEvent
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
<$> ((IDBVersionChangeEvent
self IDBVersionChangeEvent
-> Getting (JSM JSVal) IDBVersionChangeEvent (JSM JSVal)
-> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter IDBVersionChangeEvent (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"oldVersion") 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/IDBVersionChangeEvent.newVersion Mozilla IDBVersionChangeEvent.newVersion documentation> 
getNewVersion ::
              (MonadDOM m) => IDBVersionChangeEvent -> m (Maybe Word64)
getNewVersion :: forall (m :: * -> *).
MonadDOM m =>
IDBVersionChangeEvent -> m (Maybe Word64)
getNewVersion IDBVersionChangeEvent
self
  = DOM (Maybe Word64) -> m (Maybe Word64)
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      ((IDBVersionChangeEvent
self IDBVersionChangeEvent
-> Getting (JSM JSVal) IDBVersionChangeEvent (JSM JSVal)
-> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter IDBVersionChangeEvent (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"newVersion") JSM JSVal -> (JSVal -> DOM (Maybe Word64)) -> DOM (Maybe Word64)
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 (Maybe Word64)
forall a. Integral a => JSVal -> JSM (Maybe a)
integralFromDoubleFromJSVal)

-- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBVersionChangeEvent.newVersion Mozilla IDBVersionChangeEvent.newVersion documentation> 
getNewVersionUnsafe ::
                    (MonadDOM m, HasCallStack) => IDBVersionChangeEvent -> m Word64
getNewVersionUnsafe :: forall (m :: * -> *).
(MonadDOM m, HasCallStack) =>
IDBVersionChangeEvent -> m Word64
getNewVersionUnsafe IDBVersionChangeEvent
self
  = DOM Word64 -> m Word64
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (((IDBVersionChangeEvent
self IDBVersionChangeEvent
-> Getting (JSM JSVal) IDBVersionChangeEvent (JSM JSVal)
-> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter IDBVersionChangeEvent (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"newVersion") JSM JSVal -> (JSVal -> DOM (Maybe Word64)) -> DOM (Maybe Word64)
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 (Maybe Word64)
forall a. Integral a => JSVal -> JSM (Maybe a)
integralFromDoubleFromJSVal) DOM (Maybe Word64) -> (Maybe Word64 -> DOM Word64) -> DOM Word64
forall a b. JSM a -> (a -> JSM b) -> JSM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=
         DOM Word64 -> (Word64 -> DOM Word64) -> Maybe Word64 -> DOM Word64
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (String -> DOM Word64
forall a. HasCallStack => String -> a
Prelude.error String
"Nothing to return") Word64 -> DOM Word64
forall a. a -> JSM a
forall (m :: * -> *) a. Monad m => a -> m a
return)

-- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBVersionChangeEvent.newVersion Mozilla IDBVersionChangeEvent.newVersion documentation> 
getNewVersionUnchecked ::
                       (MonadDOM m) => IDBVersionChangeEvent -> m Word64
getNewVersionUnchecked :: forall (m :: * -> *).
MonadDOM m =>
IDBVersionChangeEvent -> m Word64
getNewVersionUnchecked IDBVersionChangeEvent
self
  = DOM Word64 -> m Word64
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      ((IDBVersionChangeEvent
self IDBVersionChangeEvent
-> Getting (JSM JSVal) IDBVersionChangeEvent (JSM JSVal)
-> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter IDBVersionChangeEvent (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"newVersion") JSM JSVal -> (JSVal -> DOM Word64) -> DOM Word64
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 Word64
forall a. Integral a => JSVal -> JSM a
integralFromDoubleFromJSValUnchecked)