hails-0.1: Hails/IterIO/Mime.hs
{-# LANGUAGE CPP #-}
#if defined(__GLASGOW_HASKELL__) && (__GLASGOW_HASKELL__ >= 704)
{-# LANGUAGE Trustworthy #-}
#endif
module Hails.IterIO.Mime ( systemMimeMap ) where
import qualified Data.ByteString.Char8 as S8
import Data.IterIO
import Data.IterIO.HttpRoute hiding (routeFileSys)
import System.IO.Unsafe
import Control.Exception (SomeException(..))
-- | Given a file extension (e.g., \"hs\") return its MIME type (e.g.,
-- \"text\/x-haskell\"). If there is no recognized MIME type (or none
-- of the default paths exist), this function returns
-- \"application\/octet-stream\"
systemMimeMap :: String -> S8.ByteString
systemMimeMap = unsafePerformIO $
foldr1 cat (map enumMimeFile defaultPaths) |$
mimeTypesI "application/octet-stream"
where defaultPaths = ["mime.types"
, "/etc/mime.types"
, "/var/www/conf/mime.types"]
enumMimeFile f = inumCatch (enumFile f) $ \(SomeException _) res ->
resumeI res