Implement replaceOrAddHeader function
This commit is contained in:
parent
301f4bc630
commit
839b56b032
@ -114,6 +114,7 @@ module Yesod.Core.Handler
|
|||||||
, deleteCookie
|
, deleteCookie
|
||||||
, addHeader
|
, addHeader
|
||||||
, setHeader
|
, setHeader
|
||||||
|
, replaceOrAddHeader
|
||||||
, setLanguage
|
, setLanguage
|
||||||
-- ** Content caching and expiration
|
-- ** Content caching and expiration
|
||||||
, cacheSeconds
|
, cacheSeconds
|
||||||
@ -787,6 +788,23 @@ setHeader :: MonadHandler m => Text -> Text -> m ()
|
|||||||
setHeader = addHeader
|
setHeader = addHeader
|
||||||
{-# DEPRECATED setHeader "Please use addHeader instead" #-}
|
{-# 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
|
-- | Set the Cache-Control header to indicate this response should be cached
|
||||||
-- for the given number of seconds.
|
-- for the given number of seconds.
|
||||||
cacheSeconds :: MonadHandler m => Int -> m ()
|
cacheSeconds :: MonadHandler m => Int -> m ()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user