packages feed

hsp-0.2: HSP/Request.hs

-----------------------------------------------------------------------------
-- |
-- Module      :  HSP.Request
-- Copyright   :  (c) Niklas Broberg 2004,
-- License     :  BSD-style (see the file LICENSE.txt)
-- 
-- Maintainer  :  Niklas Broberg, d00nibro@dtek.chalmers.se
-- Stability   :  experimental
-- Portability :  requires undecidable and overlapping instances
--
-- Defines the RequestEnv object available to HSP pages,
-- either in the form of a complete Request structure,
-- or as a set of CGI environment variables.
-----------------------------------------------------------------------------
module HSP.Request (
	  getParameter		-- ^ :: String -> HSP (Maybe String)
	, getParameter_		-- ^ :: String -> HSP String
        , getParameterL         -- ^ :: String -> HSP [String]
	, readParameter		-- ^ :: String -> HSP (Maybe a)
	, readParameter_	-- ^ :: String -> HSP a
	, readParameterL	-- ^ :: String -> HSP [a]
	, getHTTPMethod		-- ^ :: HSP Method
	) where 

import HSP.Data
import HSP.Exception

import HSP.Data.RequestEnv as Rq

getParameter :: String -> HSP (Maybe String)
getParameter p = 
	do rq <- getRequest
	   case Rq.getVarValue rq p of
            Just [v] -> return (Just v)
            _        -> return Nothing

getParameter_ :: String -> HSP String
getParameter_ p = 
	do rq <- getRequest
	   case Rq.getVarValue rq p of
	    Just [v]  -> return v
	    _         -> throwHSP $ ParameterLookupFailed p

getParameterL :: String -> HSP [String]
getParameterL p =
	do rq <- getRequest
	   case Rq.getVarValue rq p of
	    Just v  -> return v
	    _       -> return []

readParameter :: Read a => String -> HSP (Maybe a)
readParameter p = getParameter p >>= return . (fmap read)

readParameter_ :: Read a => String -> HSP a
readParameter_ p = getParameter_ p >>= return . read

readParameterL :: Read a => String -> HSP [a]
readParameterL p = getParameterL p >>= return . (fmap read)

-- | Get the HTTP method for the Request.
getHTTPMethod :: HSP Rq.Method
getHTTPMethod = getRequest >>= return . Rq.getMethod