{-# LANGUAGE FlexibleContexts #-}
module Network.Salvia.Handler.ExtendedFileSystem
( hExtendedFileSystemSendFile
, hExtendedFileSystem
) where

import Control.Applicative
import Control.Monad.Trans
import Network.Protocol.Http
import Network.Salvia
import Network.Salvia.Handler.CleverCSS
import Network.Salvia.Handler.HsColour
import Network.Salvia.Handler.SendFile

hExtendedFileSystemSendFile
  :: (MonadIO m, HttpM' m, SocketQueueM m, SendM m, BodyM Request m, Alternative m)
  => String -> m ()
hExtendedFileSystemSendFile dir = hFileTypeDispatcher hDirectoryResource f dir
  where
  f file = hHighlightHaskell (hHsColour file)
         . hWithDir dir
         . hFilterCSS hCleverCSS
         . hSendFileResource 
         $ file

hExtendedFileSystem
  :: (MonadIO m, HttpM' m, SendM m, BodyM Request m, Alternative m)
  => String -> m ()
hExtendedFileSystem dir = hFileTypeDispatcher hDirectoryResource f dir
  where
  f file = hHighlightHaskell (hHsColour file)
         . hWithDir dir
         . hFilterCSS hCleverCSS
         . hFileResource 
         $ file