{-# LANGUAGE DeriveDataTypeable #-}
{- |
Module      : Web.RBB.Types.FileType
Description :  Supported file types and conversion functions
Copyright   :  (c) Sebastian Witte
License     :  BSD3

Maintainer  :  woozletoff@gmail.com
Stability   :  experimental

-}
module Web.RBB.Types.FileType
    where

import           Data.Data       (Data, Typeable)
import           Data.Map        (Map)
import qualified Data.Map        as Map
import           System.FilePath (takeExtensions)

-- | Enumeration that contains all supported file type extensions for blog
-- entries.
data FileType = PandocMarkdown | LiterateHaskell
    deriving (Eq, Ord, Show, Read, Enum, Data, Typeable, Bounded)

-- | This map stores all supported file type extensions mapped to the
-- appropriate 'FileType' value.
fileTypeMap :: Map FilePath FileType
fileTypeMap = Map.fromList
    [ (".md",  PandocMarkdown)
    , (".lhs", LiterateHaskell)
    ]

-- | Convert the given files extension to the internal 'FileType'
-- representation.
fileTypeFromExtension :: FilePath -> Maybe FileType
fileTypeFromExtension ext = Map.lookup (takeExtensions ext) fileTypeMap