{-# LANGUAGE PatternSynonyms #-}
-- For HasCallStack compatibility
{-# LANGUAGE ImplicitParams, ConstraintKinds, KindSignatures #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
module JSDOM.Generated.RTCDataChannelEvent
       (newRTCDataChannelEvent, getChannel, RTCDataChannelEvent(..),
        gTypeRTCDataChannelEvent)
       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/RTCDataChannelEvent Mozilla RTCDataChannelEvent documentation> 
newRTCDataChannelEvent ::
                       (MonadDOM m, ToJSString type') =>
                         type' -> RTCDataChannelEventInit -> m RTCDataChannelEvent
newRTCDataChannelEvent :: forall (m :: * -> *) type'.
(MonadDOM m, ToJSString type') =>
type' -> RTCDataChannelEventInit -> m RTCDataChannelEvent
newRTCDataChannelEvent type'
type' RTCDataChannelEventInit
eventInitDict
  = DOM RTCDataChannelEvent -> m RTCDataChannelEvent
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (JSVal -> RTCDataChannelEvent
RTCDataChannelEvent (JSVal -> RTCDataChannelEvent)
-> JSM JSVal -> DOM RTCDataChannelEvent
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
"RTCDataChannelEvent")
           [type' -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal type'
type', RTCDataChannelEventInit -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal RTCDataChannelEventInit
eventInitDict])

-- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannelEvent.channel Mozilla RTCDataChannelEvent.channel documentation> 
getChannel ::
           (MonadDOM m) => RTCDataChannelEvent -> m RTCDataChannel
getChannel :: forall (m :: * -> *).
MonadDOM m =>
RTCDataChannelEvent -> m RTCDataChannel
getChannel RTCDataChannelEvent
self
  = DOM RTCDataChannel -> m RTCDataChannel
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((RTCDataChannelEvent
self RTCDataChannelEvent
-> Getting (JSM JSVal) RTCDataChannelEvent (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter RTCDataChannelEvent (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"channel") JSM JSVal -> (JSVal -> DOM RTCDataChannel) -> DOM RTCDataChannel
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 RTCDataChannel
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked)