packages feed

hexpress-0.1.0.0: src/Network/Hexpress/Request.hs

module Network.Hexpress.Request where

import Network.Wai
import Network.HTTP.Types
import Network.Hexpress.Types
import Data.Text
import Data.Vault.Lazy
import Data.ByteString.Lazy.Char8 as LB
import Data.ByteString.Char8 as SB
import Data.Aeson as Aeson

getQueryString :: Server Query
getQueryString = do
  req <- getRequest
  return $ queryString req

getPath :: Server [Text]
getPath = do
  req <- getRequest
  return $ pathInfo req

getMethod :: Server Method
getMethod = do
  req <- getRequest
  return $ requestMethod req

getHeaders :: Server [Header]
getHeaders = do
  req <- getRequest
  return $ requestHeaders req

getVault :: Server Vault
getVault = do
  req <- getRequest
  return $ vault req

getBodyLazy :: Server LB.ByteString
getBodyLazy = do
  req <- getRequest
  performIO $ lazyRequestBody req

getBodyStrict :: Server LB.ByteString
getBodyStrict = do
  req <- getRequest
  performIO $ strictRequestBody req

getJSONObj :: Server (Maybe Aeson.Value)
getJSONObj = getJSON

getJSON :: FromJSON a => Server (Maybe a)
getJSON = do
  body <- getBodyLazy
  return $ Aeson.decode body