packages feed

salvia-0.0.4: src/Network/Salvia/Handlers/PathRouter.hs

module Network.Salvia.Handlers.PathRouter (
    hPath
  , hPathRouter
  , hPrefix
  , hPrefixRouter

  , hParameters
  ) where

import Control.Monad.State
import Data.List (isPrefixOf)

import Network.Salvia.Httpd
import Network.Protocol.Http
import Network.Protocol.Uri (modPath, path, queryParams, Parameters)
import Network.Salvia.Handlers.Dispatching

chop :: String -> Handler a -> Handler a
chop a = withRequest $ modUri $ modPath $ drop $ length a

hPath :: Dispatcher String a
hPath p h d = hDispatch (path . uri . request) (==) p (chop p h) d

hPathRouter :: ListDispatcher String b
hPathRouter = hListDispatch hPath

hPrefix :: Dispatcher String a
hPrefix p h d = hDispatch (path . uri . request) isPrefixOf p (chop p h) d

hPrefixRouter :: ListDispatcher String b
hPrefixRouter = hListDispatch hPrefix

-- Path related utilities.

hParameters :: Handler Parameters
hParameters = gets (queryParams . uri . request)