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
{ RoutingReq -> [(ByteString, ByteString)]
_captures :: [(ByteString, ByteString)]
, RoutingReq -> Req
_request :: Req
}
instance HasRequest RoutingReq where
getRequest :: RoutingReq -> Request
getRequest = Req -> Request
forall a. HasRequest a => a -> Request
getRequest (Req -> Request) -> (RoutingReq -> Req) -> RoutingReq -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RoutingReq -> Req
_request
instance HasMethod RoutingReq where
method :: RoutingReq -> ByteString
method = Req -> ByteString
forall a. HasMethod a => a -> ByteString
method (Req -> ByteString)
-> (RoutingReq -> Req) -> RoutingReq -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RoutingReq -> Req
_request
instance HasHeaders RoutingReq where
headers :: RoutingReq -> RequestHeaders
headers = Req -> RequestHeaders
forall a. HasHeaders a => a -> RequestHeaders
headers (Req -> RequestHeaders)
-> (RoutingReq -> Req) -> RoutingReq -> RequestHeaders
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RoutingReq -> Req
_request
instance HasCookies RoutingReq where
cookies :: RoutingReq -> [(ByteString, ByteString)]
cookies = Req -> [(ByteString, ByteString)]
forall a. HasCookies a => a -> [(ByteString, ByteString)]
cookies (Req -> [(ByteString, ByteString)])
-> (RoutingReq -> Req) -> RoutingReq -> [(ByteString, ByteString)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RoutingReq -> Req
_request
instance HasQuery RoutingReq where
queryItems :: RoutingReq -> Query
queryItems = Req -> Query
forall a. HasQuery a => a -> Query
queryItems (Req -> Query) -> (RoutingReq -> Req) -> RoutingReq -> Query
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RoutingReq -> Req
_request
instance HasPath RoutingReq where
segments :: RoutingReq -> Vector ByteString
segments = Req -> Vector ByteString
forall a. HasPath a => a -> Vector ByteString
segments (Req -> Vector ByteString)
-> (RoutingReq -> Req) -> RoutingReq -> Vector ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RoutingReq -> Req
_request
instance HasCaptures RoutingReq where
captures :: RoutingReq -> [(ByteString, ByteString)]
captures = RoutingReq -> [(ByteString, ByteString)]
_captures
instance HasVault RoutingReq where
requestVault :: RoutingReq -> Vault
requestVault = Req -> Vault
forall a. HasVault a => a -> Vault
requestVault (Req -> Vault) -> (RoutingReq -> Req) -> RoutingReq -> Vault
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RoutingReq -> Req
_request
fromReq :: [(ByteString, ByteString)] -> Req -> RoutingReq
fromReq :: [(ByteString, ByteString)] -> Req -> RoutingReq
fromReq = [(ByteString, ByteString)] -> Req -> RoutingReq
RoutingReq
lookupCapture :: (HasCaptures r) => ByteString -> r -> [ByteString]
lookupCapture :: forall r. HasCaptures r => ByteString -> r -> [ByteString]
lookupCapture ByteString
name = ((ByteString, ByteString) -> ByteString)
-> [(ByteString, ByteString)] -> [ByteString]
forall a b. (a -> b) -> [a] -> [b]
map (ByteString, ByteString) -> ByteString
forall a b. (a, b) -> b
snd ([(ByteString, ByteString)] -> [ByteString])
-> (r -> [(ByteString, ByteString)]) -> r -> [ByteString]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((ByteString, ByteString) -> Bool)
-> [(ByteString, ByteString)] -> [(ByteString, ByteString)]
forall a. (a -> Bool) -> [a] -> [a]
filter ((ByteString
name ByteString -> ByteString -> Bool
forall a. Eq a => a -> a -> Bool
==) (ByteString -> Bool)
-> ((ByteString, ByteString) -> ByteString)
-> (ByteString, ByteString)
-> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ByteString, ByteString) -> ByteString
forall a b. (a, b) -> a
fst) ([(ByteString, ByteString)] -> [(ByteString, ByteString)])
-> (r -> [(ByteString, ByteString)])
-> r
-> [(ByteString, ByteString)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. r -> [(ByteString, ByteString)]
forall a. HasCaptures a => a -> [(ByteString, ByteString)]
captures