{-# LANGUAGE TypeFamilies, DataKinds #-}
module Network.Wai.RequestSpec.Internal.Env.Types (
  Env(..),
  EnvMap,
  Headers,
  ParamMap,
  QueryParams,
  FormParams,
  QParams,
  FParams,

  empty,
  lookup,
  fromList
) where

import Prelude hiding (lookup)
import Data.CaseInsensitive (CI)
import Data.Text (Text)
import qualified Data.Map as M

data QueryParams
data FormParams

type EnvMap k v  = M.Map k v
type Headers     = EnvMap (CI Text) Text
type ParamMap a  = EnvMap Text (Maybe Text)
type QParams     = ParamMap QueryParams
type FParams     = ParamMap FormParams

data Env = Env { headers :: Headers
               , qParams :: QParams
               , fParams :: FParams
               }

empty :: EnvMap k v
empty = M.empty

lookup :: (Ord k) => k -> EnvMap k v -> Maybe v
lookup = M.lookup

fromList :: (Ord k) => [(k,v)] -> EnvMap k v
fromList = M.fromList