wai-routing-0.2: src/Network/Wai/Routing/Predicate/Param.hs
-- 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 TypeFamilies #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module Network.Wai.Routing.Predicate.Param
( Param
, HasParam
, param
, hasParam
) where
import Data.ByteString (ByteString)
import Data.ByteString.From
import Network.Wai.Routing.Error
import Network.Wai.Routing.Request
import Network.Wai.Routing.Predicate.Capture
import Network.Wai.Routing.Predicate.Query
import Network.Wai.Routing.Predicate.Predicate
-- | @Param \"x\"@ is equivalent to @'Query' \"x\" ':|:' 'Capture' \"x\"@.
newtype Param a = Param ByteString
param :: ByteString -> Param a
param = Param
{-# INLINABLE param #-}
instance (FromByteString a) => Predicate (Param a) Req where
type FVal (Param a) = Error
type TVal (Param a) = a
apply (Param x) = apply (query x :|: capture x)
newtype HasParam = HasParam ByteString
hasParam :: ByteString -> HasParam
hasParam = HasParam
{-# INLINABLE hasParam #-}
instance Predicate HasParam Req where
type FVal HasParam = Error
type TVal HasParam = ()
apply (HasParam x) = apply (hasQuery x :|: hasCapture x)