-----------------------------------------------------------------------------
{-# LANGUAGE LambdaCase #-}
-----------------------------------------------------------------------------
-- | https://threejs.org/docs/index.html#api/en/constants/CustomBlendingEquations
module THREE.Constants.CustomBlendingEquations.SourceFactors
  ( -- * Types
    SourceFactors (..)
  ) where
-----------------------------------------------------------------------------
import           Miso
-----------------------------------------------------------------------------

data SourceFactors
  = ZeroFactor 
  | OneFactor 
  | SrcColorFactor
  | OneMinusSrcColorFactor 
  | SrcAlphaFactor
  | OneMinusSrcAlphaFactor 
  | DstAlphaFactor
  | OneMinusDstAlphaFactor 
  | DstColorFactor
  | OneMinusDstColorFactor 
  | SrcAlphaSaturateFactor
  | ConstantColorFactor
  | OneMinusConstantColorFactor
  | ConstantAlphaFactor
  | OneMinusConstantAlphaFactor

instance ToJSVal SourceFactors where
  toJSVal :: SourceFactors -> IO JSVal
toJSVal = Int -> IO JSVal
forall a. ToJSVal a => a -> IO JSVal
toJSVal (Int -> IO JSVal)
-> (SourceFactors -> Int) -> SourceFactors -> IO JSVal
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SourceFactors -> Int
go
    where
      go :: SourceFactors -> Int
      go :: SourceFactors -> Int
go = \case
        SourceFactors
ZeroFactor                    -> Int
200
        SourceFactors
OneFactor                     -> Int
201
        SourceFactors
SrcColorFactor                -> Int
202
        SourceFactors
OneMinusSrcColorFactor        -> Int
203
        SourceFactors
SrcAlphaFactor                -> Int
204
        SourceFactors
OneMinusSrcAlphaFactor        -> Int
205
        SourceFactors
DstAlphaFactor                -> Int
206
        SourceFactors
OneMinusDstAlphaFactor        -> Int
207
        SourceFactors
DstColorFactor                -> Int
208
        SourceFactors
OneMinusDstColorFactor        -> Int
209
        SourceFactors
SrcAlphaSaturateFactor        -> Int
210
        SourceFactors
ConstantColorFactor           -> Int
211
        SourceFactors
OneMinusConstantColorFactor   -> Int
212
        SourceFactors
ConstantAlphaFactor           -> Int
213
        SourceFactors
OneMinusConstantAlphaFactor   -> Int
214

instance FromJSVal SourceFactors where
  fromJSVal :: JSVal -> IO (Maybe SourceFactors)
fromJSVal = (Maybe Int -> Maybe SourceFactors)
-> IO (Maybe Int) -> IO (Maybe SourceFactors)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Maybe Int -> (Int -> Maybe SourceFactors) -> Maybe SourceFactors
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> Maybe SourceFactors
go) (IO (Maybe Int) -> IO (Maybe SourceFactors))
-> (JSVal -> IO (Maybe Int)) -> JSVal -> IO (Maybe SourceFactors)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> IO (Maybe Int)
forall a. FromJSVal a => JSVal -> IO (Maybe a)
fromJSVal
    where
      go :: Int -> Maybe SourceFactors
      go :: Int -> Maybe SourceFactors
go = \case
        Int
200 -> SourceFactors -> Maybe SourceFactors
forall a. a -> Maybe a
Just SourceFactors
ZeroFactor
        Int
201 -> SourceFactors -> Maybe SourceFactors
forall a. a -> Maybe a
Just SourceFactors
OneFactor
        Int
202 -> SourceFactors -> Maybe SourceFactors
forall a. a -> Maybe a
Just SourceFactors
SrcColorFactor
        Int
203 -> SourceFactors -> Maybe SourceFactors
forall a. a -> Maybe a
Just SourceFactors
OneMinusSrcColorFactor
        Int
204 -> SourceFactors -> Maybe SourceFactors
forall a. a -> Maybe a
Just SourceFactors
SrcAlphaFactor
        Int
205 -> SourceFactors -> Maybe SourceFactors
forall a. a -> Maybe a
Just SourceFactors
OneMinusSrcAlphaFactor
        Int
206 -> SourceFactors -> Maybe SourceFactors
forall a. a -> Maybe a
Just SourceFactors
DstAlphaFactor
        Int
207 -> SourceFactors -> Maybe SourceFactors
forall a. a -> Maybe a
Just SourceFactors
OneMinusDstAlphaFactor
        Int
208 -> SourceFactors -> Maybe SourceFactors
forall a. a -> Maybe a
Just SourceFactors
DstColorFactor
        Int
209 -> SourceFactors -> Maybe SourceFactors
forall a. a -> Maybe a
Just SourceFactors
OneMinusDstColorFactor
        Int
210 -> SourceFactors -> Maybe SourceFactors
forall a. a -> Maybe a
Just SourceFactors
SrcAlphaSaturateFactor
        Int
211 -> SourceFactors -> Maybe SourceFactors
forall a. a -> Maybe a
Just SourceFactors
ConstantColorFactor
        Int
212 -> SourceFactors -> Maybe SourceFactors
forall a. a -> Maybe a
Just SourceFactors
OneMinusConstantColorFactor
        Int
213 -> SourceFactors -> Maybe SourceFactors
forall a. a -> Maybe a
Just SourceFactors
ConstantAlphaFactor
        Int
214 -> SourceFactors -> Maybe SourceFactors
forall a. a -> Maybe a
Just SourceFactors
OneMinusConstantAlphaFactor
        Int
_ -> Maybe SourceFactors
forall a. Maybe a
Nothing

-----------------------------------------------------------------------------