module Network.Wai.Routing.Request
( RoutingReq
, HasCaptures (..)
, fromReq
, lookupCapture
) where
import Data.ByteString (ByteString)
import Network.Wai.Predicate.Request
class HasCaptures a where
captures :: a -> [(ByteString, ByteString)]
data RoutingReq = RoutingReq
{ _captures :: [(ByteString, ByteString)]
, _request :: Req
}
instance HasRequest RoutingReq where
getRequest = getRequest . _request
instance HasMethod RoutingReq where
method = method . _request
instance HasHeaders RoutingReq where
headers = headers . _request
instance HasCookies RoutingReq where
cookies = cookies . _request
instance HasQuery RoutingReq where
queryItems = queryItems . _request
instance HasPath RoutingReq where
segments = segments . _request
instance HasCaptures RoutingReq where
captures = _captures
instance HasVault RoutingReq where
requestVault = requestVault . _request
fromReq :: [(ByteString, ByteString)] -> Req -> RoutingReq
fromReq = RoutingReq
lookupCapture :: (HasCaptures r) => ByteString -> r -> [ByteString]
lookupCapture name = map snd . filter ((name ==) . fst) . captures