module Network.Salvia.Handler.Path
( hPath
, hPathRouter
, hPrefix
, hPrefixRouter
, hQueryParameters
)
where
import Control.Category
import Data.List
import Data.Record.Label
import Network.Protocol.Http
import Network.Protocol.Uri
import Network.Salvia.Interface
import Network.Salvia.Handler.Dispatching
import Network.Salvia.Handler.Rewrite
import Prelude hiding ((.), id)
hPath :: HttpM Request m => Dispatcher String m a
hPath p h = hRequestDispatch (path . asUri) (==) p (chop p h)
hPathRouter :: HttpM Request m => ListDispatcher String m a
hPathRouter = hListDispatch hPath
hPrefix :: HttpM Request m => Dispatcher String m a
hPrefix p h = hRequestDispatch (path . asUri) isPrefixOf p (chop p h)
hPrefixRouter :: HttpM Request m => ListDispatcher String m a
hPrefixRouter = hListDispatch hPrefix
hQueryParameters :: HttpM Request m => m Parameters
hQueryParameters = request (getM (queryParams . asUri))
chop :: HttpM Request m => String -> m a -> m a
chop a = hLocalRequest (path . asUri) (drop (length a))