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

data MinificationFilters
  = NearestFilter 
  | NearestMipmapNearestFilter
  | NearestMipmapLinearFilter 
  | LinearFilter
  | LinearMipmapNearestFilter 
  | LinearMipmapLinearFilter

instance ToJSVal MinificationFilters where
  toJSVal :: MinificationFilters -> IO JSVal
toJSVal = Int -> IO JSVal
forall a. ToJSVal a => a -> IO JSVal
toJSVal (Int -> IO JSVal)
-> (MinificationFilters -> Int) -> MinificationFilters -> IO JSVal
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MinificationFilters -> Int
go
    where
      go :: MinificationFilters -> Int
      go :: MinificationFilters -> Int
go = \case
        MinificationFilters
NearestFilter               -> Int
1003
        MinificationFilters
NearestMipmapNearestFilter  -> Int
1004
        MinificationFilters
NearestMipmapLinearFilter   -> Int
1005
        MinificationFilters
LinearFilter                -> Int
1006
        MinificationFilters
LinearMipmapNearestFilter   -> Int
1007
        MinificationFilters
LinearMipmapLinearFilter    -> Int
1008

instance FromJSVal MinificationFilters where
  fromJSVal :: JSVal -> IO (Maybe MinificationFilters)
fromJSVal = (Maybe Int -> Maybe MinificationFilters)
-> IO (Maybe Int) -> IO (Maybe MinificationFilters)
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 MinificationFilters) -> Maybe MinificationFilters
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 MinificationFilters
go) (IO (Maybe Int) -> IO (Maybe MinificationFilters))
-> (JSVal -> IO (Maybe Int))
-> JSVal
-> IO (Maybe MinificationFilters)
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 MinificationFilters
      go :: Int -> Maybe MinificationFilters
go = \case
        Int
1003 -> MinificationFilters -> Maybe MinificationFilters
forall a. a -> Maybe a
Just MinificationFilters
NearestFilter 
        Int
1004 -> MinificationFilters -> Maybe MinificationFilters
forall a. a -> Maybe a
Just MinificationFilters
NearestMipmapNearestFilter
        Int
1005 -> MinificationFilters -> Maybe MinificationFilters
forall a. a -> Maybe a
Just MinificationFilters
NearestMipmapLinearFilter 
        Int
1006 -> MinificationFilters -> Maybe MinificationFilters
forall a. a -> Maybe a
Just MinificationFilters
LinearFilter
        Int
1007 -> MinificationFilters -> Maybe MinificationFilters
forall a. a -> Maybe a
Just MinificationFilters
LinearMipmapNearestFilter 
        Int
1008 -> MinificationFilters -> Maybe MinificationFilters
forall a. a -> Maybe a
Just MinificationFilters
LinearMipmapLinearFilter
        Int
_ -> Maybe MinificationFilters
forall a. Maybe a
Nothing

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