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

data BlendingEquations
  = AddEquation
  | SubtractEquation
  | ReverseSubtractEquation
  | MinEquation 
  | MaxEquation

instance ToJSVal BlendingEquations where
  toJSVal :: BlendingEquations -> IO JSVal
toJSVal = Int -> IO JSVal
forall a. ToJSVal a => a -> IO JSVal
toJSVal (Int -> IO JSVal)
-> (BlendingEquations -> Int) -> BlendingEquations -> IO JSVal
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BlendingEquations -> Int
go
    where
      go :: BlendingEquations -> Int
      go :: BlendingEquations -> Int
go = \case
        BlendingEquations
AddEquation             -> Int
100
        BlendingEquations
SubtractEquation        -> Int
101
        BlendingEquations
ReverseSubtractEquation -> Int
102
        BlendingEquations
MinEquation             -> Int
103
        BlendingEquations
MaxEquation             -> Int
104

instance FromJSVal BlendingEquations where
  fromJSVal :: JSVal -> IO (Maybe BlendingEquations)
fromJSVal = (Maybe Int -> Maybe BlendingEquations)
-> IO (Maybe Int) -> IO (Maybe BlendingEquations)
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 BlendingEquations) -> Maybe BlendingEquations
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 BlendingEquations
go) (IO (Maybe Int) -> IO (Maybe BlendingEquations))
-> (JSVal -> IO (Maybe Int))
-> JSVal
-> IO (Maybe BlendingEquations)
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 BlendingEquations
      go :: Int -> Maybe BlendingEquations
go = \case
        Int
100 -> BlendingEquations -> Maybe BlendingEquations
forall a. a -> Maybe a
Just BlendingEquations
AddEquation
        Int
101 -> BlendingEquations -> Maybe BlendingEquations
forall a. a -> Maybe a
Just BlendingEquations
SubtractEquation
        Int
102 -> BlendingEquations -> Maybe BlendingEquations
forall a. a -> Maybe a
Just BlendingEquations
ReverseSubtractEquation
        Int
103 -> BlendingEquations -> Maybe BlendingEquations
forall a. a -> Maybe a
Just BlendingEquations
MinEquation
        Int
104 -> BlendingEquations -> Maybe BlendingEquations
forall a. a -> Maybe a
Just BlendingEquations
MaxEquation
        Int
_ -> Maybe BlendingEquations
forall a. Maybe a
Nothing

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