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

-- | <https://developer.mozilla.org/en-US/docs/Web/API/ReadableByteStreamController.enqueue Mozilla ReadableByteStreamController.enqueue documentation> 
enqueue ::
        (MonadDOM m, ToJSVal chunk) =>
          ReadableByteStreamController -> Maybe chunk -> m ()
enqueue :: ReadableByteStreamController -> Maybe chunk -> m ()
enqueue ReadableByteStreamController
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 (ReadableByteStreamController
self ReadableByteStreamController
-> Getting (JSM JSVal) ReadableByteStreamController (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/ReadableByteStreamController.close Mozilla ReadableByteStreamController.close documentation> 
close :: (MonadDOM m) => ReadableByteStreamController -> m ()
close :: ReadableByteStreamController -> m ()
close ReadableByteStreamController
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 (ReadableByteStreamController
self ReadableByteStreamController
-> Getting (JSM JSVal) ReadableByteStreamController (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/ReadableByteStreamController.error Mozilla ReadableByteStreamController.error documentation> 
error ::
      (MonadDOM m, ToJSVal error) =>
        ReadableByteStreamController -> Maybe error -> m ()
error :: ReadableByteStreamController -> Maybe error -> m ()
error ReadableByteStreamController
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 (ReadableByteStreamController
self ReadableByteStreamController
-> Getting (JSM JSVal) ReadableByteStreamController (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/ReadableByteStreamController.byobRequest Mozilla ReadableByteStreamController.byobRequest documentation> 
getByobRequest ::
               (MonadDOM m) =>
                 ReadableByteStreamController -> m ReadableStreamBYOBRequest
getByobRequest :: ReadableByteStreamController -> m ReadableStreamBYOBRequest
getByobRequest ReadableByteStreamController
self
  = DOM ReadableStreamBYOBRequest -> m ReadableStreamBYOBRequest
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((ReadableByteStreamController
self ReadableByteStreamController
-> Getting (JSM JSVal) ReadableByteStreamController (JSM JSVal)
-> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char]
-> IndexPreservingGetter ReadableByteStreamController (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js [Char]
"byobRequest") JSM JSVal
-> (JSVal -> DOM ReadableStreamBYOBRequest)
-> DOM ReadableStreamBYOBRequest
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM ReadableStreamBYOBRequest
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked)

-- | <https://developer.mozilla.org/en-US/docs/Web/API/ReadableByteStreamController.desiredSize Mozilla ReadableByteStreamController.desiredSize documentation> 
getDesiredSize ::
               (MonadDOM m) => ReadableByteStreamController -> m Double
getDesiredSize :: ReadableByteStreamController -> m Double
getDesiredSize ReadableByteStreamController
self
  = DOM Double -> m Double
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((ReadableByteStreamController
self ReadableByteStreamController
-> Getting (JSM JSVal) ReadableByteStreamController (JSM JSVal)
-> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char]
-> IndexPreservingGetter ReadableByteStreamController (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)