module Network.Wai.RequestSpec.Internal.Combinators.Params ( qParam, qParamM, fParam, fParamM ) where import Control.Applicative import Data.Text (Text) import qualified Data.Map as M import Network.Wai.RequestSpec.Parser import Network.Wai.RequestSpec.Error import Network.Wai.RequestSpec.Internal.Env param :: (Env -> ParamMap a) -> (Text -> P a) -> Text -> Env -> P a param params f s = maybe missingParam (there f) . M.lookup s . params where missingParam = missing (Param s) there f' (Just t) = f' t there _ _ = missingParam paramM :: (Env -> ParamMap a) -> (Text -> P a) -> Text -> Env -> P (Maybe a) paramM params f s e = maybe (pure Nothing) (there f) $ M.lookup s (params e) where there f' (Just t) = f' t >>= (pure . Just) there _ _ = pure Nothing qParam :: (Env -> ParamMap QueryParams) -> (Text -> P a) -> Text -> Env -> P a qParam = param qParamM :: (Env -> ParamMap QueryParams) -> (Text -> P a) -> Text -> Env -> P (Maybe a) qParamM = paramM fParam :: (Env -> ParamMap FormParams) -> (Text -> P a) -> Text -> Env -> P a fParam = param fParamM :: (Env -> ParamMap FormParams) -> (Text -> P a) -> Text -> Env -> P (Maybe a) fParamM = paramM