packages feed

webgear-core-1.2.0: src/WebGear/Core/Handler/Static.hs

{- |
 Handlers for serving static resources
-}
module WebGear.Core.Handler.Static (
  serveStatic,
) where

import Control.Arrow (returnA)
import Network.Wai (Request (..))
import qualified Network.Wai.Application.Static as Wai.Static
import WebGear.Core.Handler (Handler (..), RequestHandler, RoutePath (..))
import WebGear.Core.Request (toWaiRequest)
import WebGear.Core.Response (Response (ResponseCont))
import WebGear.Core.Trait (unwitness)
import Prelude hiding (readFile)

-- | Serve static assets
serveStatic :: (Handler h m) => Wai.Static.StaticSettings -> RequestHandler h ts
serveStatic settings =
  proc request -> do
    RoutePath pathInfo <- consumeRoute returnA -< ()
    let waiRequest = toWaiRequest $ unwitness request
    returnA -< ResponseCont $ Wai.Static.staticApp settings waiRequest{pathInfo}