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)