{-# LANGUAGE PatternSynonyms #-}
-- For HasCallStack compatibility
{-# LANGUAGE ImplicitParams, ConstraintKinds, KindSignatures #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
module JSDOM.Generated.WebGPUDepthStencilDescriptor
       (newWebGPUDepthStencilDescriptor, setDepthCompareFunction,
        getDepthCompareFunction, setDepthWriteEnabled,
        getDepthWriteEnabled, WebGPUDepthStencilDescriptor(..),
        gTypeWebGPUDepthStencilDescriptor)
       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/WebGPUDepthStencilDescriptor Mozilla WebGPUDepthStencilDescriptor documentation> 
newWebGPUDepthStencilDescriptor ::
                                (MonadDOM m) => m WebGPUDepthStencilDescriptor
newWebGPUDepthStencilDescriptor :: m WebGPUDepthStencilDescriptor
newWebGPUDepthStencilDescriptor
  = DOM WebGPUDepthStencilDescriptor -> m WebGPUDepthStencilDescriptor
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (JSVal -> WebGPUDepthStencilDescriptor
WebGPUDepthStencilDescriptor (JSVal -> WebGPUDepthStencilDescriptor)
-> JSM JSVal -> DOM WebGPUDepthStencilDescriptor
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
         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]
"WebGPUDepthStencilDescriptor") ())

-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGPUDepthStencilDescriptor.depthCompareFunction Mozilla WebGPUDepthStencilDescriptor.depthCompareFunction documentation> 
setDepthCompareFunction ::
                        (MonadDOM m) =>
                          WebGPUDepthStencilDescriptor -> WebGPUCompareFunction -> m ()
setDepthCompareFunction :: WebGPUDepthStencilDescriptor -> WebGPUCompareFunction -> m ()
setDepthCompareFunction WebGPUDepthStencilDescriptor
self WebGPUCompareFunction
val
  = DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM (WebGPUDepthStencilDescriptor
self WebGPUDepthStencilDescriptor
-> Getting (DOM ()) WebGPUDepthStencilDescriptor (DOM ()) -> DOM ()
forall s a. s -> Getting a s a -> a
^. [Char]
-> JSM JSVal
-> forall o. MakeObject o => IndexPreservingGetter o (DOM ())
forall name val.
(ToJSString name, ToJSVal val) =>
name
-> val
-> forall o. MakeObject o => IndexPreservingGetter o (DOM ())
jss [Char]
"depthCompareFunction" (WebGPUCompareFunction -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal WebGPUCompareFunction
val))

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

-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGPUDepthStencilDescriptor.depthWriteEnabled Mozilla WebGPUDepthStencilDescriptor.depthWriteEnabled documentation> 
setDepthWriteEnabled ::
                     (MonadDOM m) => WebGPUDepthStencilDescriptor -> Bool -> m ()
setDepthWriteEnabled :: WebGPUDepthStencilDescriptor -> Bool -> m ()
setDepthWriteEnabled WebGPUDepthStencilDescriptor
self Bool
val
  = DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM (WebGPUDepthStencilDescriptor
self WebGPUDepthStencilDescriptor
-> Getting (DOM ()) WebGPUDepthStencilDescriptor (DOM ()) -> DOM ()
forall s a. s -> Getting a s a -> a
^. [Char]
-> JSM JSVal
-> forall o. MakeObject o => IndexPreservingGetter o (DOM ())
forall name val.
(ToJSString name, ToJSVal val) =>
name
-> val
-> forall o. MakeObject o => IndexPreservingGetter o (DOM ())
jss [Char]
"depthWriteEnabled" (Bool -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Bool
val))

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