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

data MagnificationFilters
  = NearestFilter 
  | LinearFilter

instance ToJSVal MagnificationFilters where
  toJSVal :: MagnificationFilters -> IO JSVal
toJSVal = Int -> IO JSVal
forall a. ToJSVal a => a -> IO JSVal
toJSVal (Int -> IO JSVal)
-> (MagnificationFilters -> Int)
-> MagnificationFilters
-> IO JSVal
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MagnificationFilters -> Int
go
    where
      go :: MagnificationFilters -> Int
      go :: MagnificationFilters -> Int
go = \case
        MagnificationFilters
NearestFilter   -> Int
1003
        MagnificationFilters
LinearFilter    -> Int
1006

instance FromJSVal MagnificationFilters where
  fromJSVal :: JSVal -> IO (Maybe MagnificationFilters)
fromJSVal = (Maybe Int -> Maybe MagnificationFilters)
-> IO (Maybe Int) -> IO (Maybe MagnificationFilters)
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 MagnificationFilters)
-> Maybe MagnificationFilters
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 MagnificationFilters
go) (IO (Maybe Int) -> IO (Maybe MagnificationFilters))
-> (JSVal -> IO (Maybe Int))
-> JSVal
-> IO (Maybe MagnificationFilters)
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 MagnificationFilters
      go :: Int -> Maybe MagnificationFilters
go = \case
        Int
1003 -> MagnificationFilters -> Maybe MagnificationFilters
forall a. a -> Maybe a
Just MagnificationFilters
NearestFilter
        Int
1006 -> MagnificationFilters -> Maybe MagnificationFilters
forall a. a -> Maybe a
Just MagnificationFilters
LinearFilter
        Int
_ -> Maybe MagnificationFilters
forall a. Maybe a
Nothing

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