module Snap.Predicates.Internal
  ( headers
  , params
  , safeHead
  )
where

import Snap.Core hiding (headers)
import Data.ByteString (ByteString)
import Data.CaseInsensitive (mk)
import qualified Data.Map.Strict as M

headers :: Request -> ByteString -> [ByteString]
headers rq name = maybe [] id . getHeaders (mk name) $ rq

params :: Request -> ByteString -> [ByteString]
params rq name = maybe [] id . M.lookup name . rqParams $ rq

safeHead :: [a] -> Maybe a
safeHead []    = Nothing
safeHead (h:_) = Just h