bird-0.0.2: src/Bird/Request.hs
module Bird.Request(
Request(..),
envToRequest
) where
import Hack
import Data.Default
import Data.ByteString.Lazy.Char8 (pack)
import qualified Data.Map as Hash
data Request =
Request {
verb :: RequestMethod,
path :: [String],
params :: Hash.Map String String,
protocol :: Hack_UrlScheme,
hackEnvironment :: Env
} deriving (Show)
instance Default Request where
def = Request { verb = GET, path = [], params = Hash.empty, protocol = HTTP, hackEnvironment = def }
envToRequest :: Env -> Request
envToRequest e =
Request {
verb = requestMethod e,
path = split '/' $ pathInfo e,
params = Hash.fromList $ buildParams (queryString e),
protocol = hackUrlScheme e,
hackEnvironment = e
}
infixl 9 ==>
f ==> g = g $ f
buildParams "" = []
buildParams queryString = queryString ==> split '&' ==> map (split '=') ==> map tupleize
tupleize (a:b:[]) = (a,b)
split :: Char -> String -> [String]
split d s
| findSep == [] = []
| otherwise = t : split d s''
where
(t, s'') = break (== d) findSep
findSep = dropWhile (== d) s