Implement replaceOrAddHeader function

This commit is contained in:
Sibi Prabakaran 2017-07-13 11:10:54 +05:30
parent 301f4bc630
commit 839b56b032
No known key found for this signature in database
GPG Key ID: D19E3E0EBB557613

View File

@ -114,6 +114,7 @@ module Yesod.Core.Handler
, deleteCookie
, addHeader
, setHeader
, replaceOrAddHeader
, setLanguage
-- ** Content caching and expiration
, cacheSeconds
@ -787,6 +788,23 @@ setHeader :: MonadHandler m => Text -> Text -> m ()
setHeader = addHeader
{-# DEPRECATED setHeader "Please use addHeader instead" #-}
replaceOrAddHeader :: MonadHandler m => Text -> Text -> m ()
replaceOrAddHeader a b =
let header = Header (encodeUtf8 a) (encodeUtf8 b)
in modify $ \g -> g {ghsHeaders = replaceHeader header (ghsHeaders g)}
where
sameHeaderName :: Header -> Header -> Bool
sameHeaderName (Header n1 _) (Header n2 _) = n1 == n2
sameHeaderName _ _ = False
replaceHeader :: Header -> Endo [Header] -> Endo [Header]
replaceHeader header endo =
let allHeaders :: [Header] = appEndo endo []
in Endo
(\y ->
(header : y) ++
filter (\x -> not (sameHeaderName x header)) allHeaders)
-- | Set the Cache-Control header to indicate this response should be cached
-- for the given number of seconds.
cacheSeconds :: MonadHandler m => Int -> m ()