{-# LANGUAGE PatternSynonyms #-}
-- For HasCallStack compatibility
{-# LANGUAGE ImplicitParams, ConstraintKinds, KindSignatures #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
module JSDOM.Generated.ReadableStreamDefaultController
       (newReadableStreamDefaultController, enqueue, close, error,
        getDesiredSize, ReadableStreamDefaultController(..),
        gTypeReadableStreamDefaultController)
       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/ReadableStreamDefaultController Mozilla ReadableStreamDefaultController documentation> 
newReadableStreamDefaultController ::
                                   (MonadDOM m, ToJSVal underlyingSource) =>
                                     ReadableStream ->
                                       underlyingSource ->
                                         Word -> Word -> m ReadableStreamDefaultController
newReadableStreamDefaultController :: ReadableStream
-> underlyingSource
-> Word
-> Word
-> m ReadableStreamDefaultController
newReadableStreamDefaultController ReadableStream
stream underlyingSource
underlyingSource Word
size
  Word
highWaterMark
  = DOM ReadableStreamDefaultController
-> m ReadableStreamDefaultController
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (JSVal -> ReadableStreamDefaultController
ReadableStreamDefaultController (JSVal -> ReadableStreamDefaultController)
-> JSM JSVal -> DOM ReadableStreamDefaultController
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]
"ReadableStreamDefaultController")
           [ReadableStream -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal ReadableStream
stream, underlyingSource -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal underlyingSource
underlyingSource, Word -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Word
size,
            Word -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Word
highWaterMark])

-- | <https://developer.mozilla.org/en-US/docs/Web/API/ReadableStreamDefaultController.enqueue Mozilla ReadableStreamDefaultController.enqueue documentation> 
enqueue ::
        (MonadDOM m, ToJSVal chunk) =>
          ReadableStreamDefaultController -> Maybe chunk -> m ()
enqueue :: ReadableStreamDefaultController -> Maybe chunk -> m ()
enqueue ReadableStreamDefaultController
self Maybe chunk
chunk
  = DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM (JSM JSVal -> DOM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (ReadableStreamDefaultController
self ReadableStreamDefaultController
-> Getting (JSM JSVal) ReadableStreamDefaultController (JSM JSVal)
-> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char] -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf [Char]
"enqueue" [Maybe chunk -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe chunk
chunk]))

-- | <https://developer.mozilla.org/en-US/docs/Web/API/ReadableStreamDefaultController.close Mozilla ReadableStreamDefaultController.close documentation> 
close :: (MonadDOM m) => ReadableStreamDefaultController -> m ()
close :: ReadableStreamDefaultController -> m ()
close ReadableStreamDefaultController
self = DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM (JSM JSVal -> DOM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (ReadableStreamDefaultController
self ReadableStreamDefaultController
-> Getting (JSM JSVal) ReadableStreamDefaultController (JSM JSVal)
-> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char] -> () -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf [Char]
"close" ()))

-- | <https://developer.mozilla.org/en-US/docs/Web/API/ReadableStreamDefaultController.error Mozilla ReadableStreamDefaultController.error documentation> 
error ::
      (MonadDOM m, ToJSVal error) =>
        ReadableStreamDefaultController -> Maybe error -> m ()
error :: ReadableStreamDefaultController -> Maybe error -> m ()
error ReadableStreamDefaultController
self Maybe error
error
  = DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM (JSM JSVal -> DOM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (ReadableStreamDefaultController
self ReadableStreamDefaultController
-> Getting (JSM JSVal) ReadableStreamDefaultController (JSM JSVal)
-> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char] -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf [Char]
"error" [Maybe error -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe error
error]))

-- | <https://developer.mozilla.org/en-US/docs/Web/API/ReadableStreamDefaultController.desiredSize Mozilla ReadableStreamDefaultController.desiredSize documentation> 
getDesiredSize ::
               (MonadDOM m) => ReadableStreamDefaultController -> m Double
getDesiredSize :: ReadableStreamDefaultController -> m Double
getDesiredSize ReadableStreamDefaultController
self
  = DOM Double -> m Double
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((ReadableStreamDefaultController
self ReadableStreamDefaultController
-> Getting (JSM JSVal) ReadableStreamDefaultController (JSM JSVal)
-> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char]
-> IndexPreservingGetter
     ReadableStreamDefaultController (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js [Char]
"desiredSize") JSM JSVal -> (JSVal -> DOM Double) -> DOM Double
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM Double
forall value. ToJSVal value => value -> DOM Double
valToNumber)