iterio-server-0.3: Data/IterIO/Http/Support/Utils.hs
{-# LANGUAGE CPP #-}
#if defined(__GLASGOW_HASKELL__) && (__GLASGOW_HASKELL__ >= 702)
{-# LANGUAGE Safe #-}
#endif
module Data.IterIO.Http.Support.Utils where
import Data.ByteString.Lazy.Char8
import Data.IterIO
import Data.IterIO.Http
import Data.IterIO.Http.Support.Action
-- | For 'Action's where the body type is a 'ByteString', parse the
-- body with 'parseParams\'' and prepend the result to the 'Action''s
-- 'Param's
parseParams :: Monad m => Action t ByteString m [Param]
parseParams = do
req <- getHttpReq
body <- getBody
prms0 <- params
prms1 <- parseParams' req body
setParams $ prms1 ++ prms0
-- | Parse url encoded or form encoded paramters from an HTTP
-- body.
parseParams' :: Monad m => HttpReq a -> ByteString -> m [Param]
parseParams' req body = inumPure body |$ foldForm req handle []
where handle accm field = do
val <- pureI
return $ (Param (ffName field) val (ffHeaders field)):accm