packages feed

yesod-session-persist-0.0.0.0: internal/Yesod/Session/Freeze.hs

module Yesod.Session.Freeze
  ( disableSessionManagement
  , assignSessionFreeze
  ) where

import Internal.Prelude

import Embedding
import Session.Freeze
import Yesod.Core (HandlerSite, MonadHandler (liftHandler), getYesod)
import Yesod.Session.Embedding.Options

-- | Indicate whether the session should be frozen for the handling
--   of the current request
--
-- At the end of the request handler, if the value is 'Just', no
-- database actions will be performed and no cookies will be set.
assignSessionFreeze
  :: (MonadHandler m, HasSessionEmbeddings (HandlerSite m))
  => Maybe SessionFreeze
  -- ^ 'Just' to freeze the session, or 'Nothing' to cancel any previous
  --   request for session freezing and restore the default behavior
  -> m ()
assignSessionFreeze f = do
  embedding <- getSessionEmbeddings <$> getYesod
  liftHandler $ embed embedding.freeze f

disableSessionManagement
  :: (MonadHandler m, HasSessionEmbeddings (HandlerSite m)) => m ()
disableSessionManagement = assignSessionFreeze (Just FreezeSessionForCurrentRequest)