packages feed

salvia-0.1: src/Network/Salvia/Handler/Head.hs

module Network.Salvia.Handler.Head (hHead) where

import Control.Applicative
import Control.Monad.State (put)
import Data.Record.Label
import Network.Protocol.Http
import Network.Salvia.Httpd

{- |
The 'hHead' handler makes sure no response body is sent to the client when the
request is an HTTP 'HEAD' request. In the case of a 'HEAD' request the
specified sub handler will be executed under the assumption that the request
was a 'GET' request, otherwise this handler will act as the identify function.
-}

hHead :: Handler a -> Handler a
hHead handler = do
  m <- getM (method % request)
  case m of
    HEAD -> withM (method % request) (put GET) $
              handler <* emptyQueue
    _    -> handler