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

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

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