{-# LANGUAGE PatternSynonyms #-}
-- For HasCallStack compatibility
{-# LANGUAGE ImplicitParams, ConstraintKinds, KindSignatures #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
module JSDOM.Generated.GamepadEvent
       (newGamepadEvent, getGamepad, getGamepadUnsafe,
        getGamepadUnchecked, GamepadEvent(..), gTypeGamepadEvent)
       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/GamepadEvent Mozilla GamepadEvent documentation> 
newGamepadEvent ::
                (MonadDOM m, ToJSString type') =>
                  type' -> GamepadEventInit -> m GamepadEvent
newGamepadEvent :: type' -> GamepadEventInit -> m GamepadEvent
newGamepadEvent type'
type' GamepadEventInit
eventInitDict
  = DOM GamepadEvent -> m GamepadEvent
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (JSVal -> GamepadEvent
GamepadEvent (JSVal -> GamepadEvent) -> JSM JSVal -> DOM GamepadEvent
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 ([Char] -> JSM JSVal
forall a. ToJSString a => a -> JSM JSVal
jsg [Char]
"GamepadEvent") [type' -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal type'
type', GamepadEventInit -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal GamepadEventInit
eventInitDict])

-- | <https://developer.mozilla.org/en-US/docs/Web/API/GamepadEvent.gamepad Mozilla GamepadEvent.gamepad documentation> 
getGamepad :: (MonadDOM m) => GamepadEvent -> m (Maybe Gamepad)
getGamepad :: GamepadEvent -> m (Maybe Gamepad)
getGamepad GamepadEvent
self = DOM (Maybe Gamepad) -> m (Maybe Gamepad)
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((GamepadEvent
self GamepadEvent
-> Getting (JSM JSVal) GamepadEvent (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char] -> IndexPreservingGetter GamepadEvent (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js [Char]
"gamepad") JSM JSVal -> (JSVal -> DOM (Maybe Gamepad)) -> DOM (Maybe Gamepad)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM (Maybe Gamepad)
forall a. FromJSVal a => JSVal -> JSM (Maybe a)
fromJSVal)

-- | <https://developer.mozilla.org/en-US/docs/Web/API/GamepadEvent.gamepad Mozilla GamepadEvent.gamepad documentation> 
getGamepadUnsafe ::
                 (MonadDOM m, HasCallStack) => GamepadEvent -> m Gamepad
getGamepadUnsafe :: GamepadEvent -> m Gamepad
getGamepadUnsafe GamepadEvent
self
  = DOM Gamepad -> m Gamepad
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (((GamepadEvent
self GamepadEvent
-> Getting (JSM JSVal) GamepadEvent (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char] -> IndexPreservingGetter GamepadEvent (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js [Char]
"gamepad") JSM JSVal -> (JSVal -> DOM (Maybe Gamepad)) -> DOM (Maybe Gamepad)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM (Maybe Gamepad)
forall a. FromJSVal a => JSVal -> JSM (Maybe a)
fromJSVal) DOM (Maybe Gamepad)
-> (Maybe Gamepad -> DOM Gamepad) -> DOM Gamepad
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=
         DOM Gamepad
-> (Gamepad -> DOM Gamepad) -> Maybe Gamepad -> DOM Gamepad
forall b a. b -> (a -> b) -> Maybe a -> b
maybe ([Char] -> DOM Gamepad
forall a. HasCallStack => [Char] -> a
Prelude.error [Char]
"Nothing to return") Gamepad -> DOM Gamepad
forall (m :: * -> *) a. Monad m => a -> m a
return)

-- | <https://developer.mozilla.org/en-US/docs/Web/API/GamepadEvent.gamepad Mozilla GamepadEvent.gamepad documentation> 
getGamepadUnchecked :: (MonadDOM m) => GamepadEvent -> m Gamepad
getGamepadUnchecked :: GamepadEvent -> m Gamepad
getGamepadUnchecked GamepadEvent
self
  = DOM Gamepad -> m Gamepad
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((GamepadEvent
self GamepadEvent
-> Getting (JSM JSVal) GamepadEvent (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char] -> IndexPreservingGetter GamepadEvent (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js [Char]
"gamepad") JSM JSVal -> (JSVal -> DOM Gamepad) -> DOM Gamepad
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM Gamepad
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked)