-- This Source Code Form is subject to the terms of the Mozilla Public -- License, v. 2.0. If a copy of the MPL was not distributed with this -- file, You can obtain one at http://mozilla.org/MPL/2.0/. {-# LANGUAGE OverloadedStrings #-} module Network.Wai.Route ( Handler , route ) where import Data.ByteString (ByteString) import Network.HTTP.Types import Network.Wai import Network.Wai.Route.Tree import Prelude hiding (lookup) import qualified Data.ByteString.Lazy as L -- | A 'Handler' is a generalized 'Application' that receives the captured -- path parameters as its first argument. type Handler m = [(ByteString, ByteString)] -- ^ The captured path parameters. -> Request -- ^ The matched 'Request'. -> (Response -> m ResponseReceived) -- ^ The continuation. -> m ResponseReceived -- | Routes requests to 'Handler's according to a routing table. route :: Monad m => [(ByteString, Handler m)] -> Request -> (Response -> m ResponseReceived) -> m ResponseReceived route rs rq k = case lookup (fromList rs) segs of Just e -> value e (captured $ captures e) rq k Nothing -> k notFound where segs = segments (rawPathInfo rq) notFound = responseLBS status404 [] L.empty