module Yesod.Session.Memcache.Yesod
( makeSessionBackend
, SessionConfiguration (..)
) where
import Internal.Prelude
import Database.Memcache.Client qualified as Memcache
import Yesod.Core.Types (SessionBackend (..))
import Yesod.Session.Memcache.Storage
import Yesod.Session.Options
import Yesod.Session.Storage.Yesod
( SessionConfiguration' (..)
, makeSessionBackend'
)
data SessionConfiguration env = SessionConfiguration
{ forall {k} (env :: k).
SessionConfiguration env -> SessionPersistence
persistence :: SessionPersistence
, forall {k} (env :: k). SessionConfiguration env -> Options IO IO
options :: Options IO IO
}
makeSessionBackend
:: SessionConfiguration Memcache.Client
-> IO SessionBackend
makeSessionBackend :: SessionConfiguration Client -> IO SessionBackend
makeSessionBackend SessionConfiguration Client
configuration =
case SessionPersistence
persistence of
SessionPersistence {} ->
SessionConfiguration' Any -> IO SessionBackend
forall {k} (session :: k).
SessionConfiguration' session -> IO SessionBackend
makeSessionBackend'
SessionConfiguration'
{ $sel:storage:SessionConfiguration' :: forall a. StorageOperation a -> IO a
storage = SessionPersistence -> Options IO IO -> StorageOperation a -> IO a
forall (m :: * -> *) result.
(MonadThrow m, MonadIO m) =>
SessionPersistence
-> Options IO IO -> StorageOperation result -> m result
memcacheStorage SessionPersistence
persistence Options IO IO
options
, $sel:options:SessionConfiguration' :: Options IO IO
options = Options IO IO
options
, $sel:runDB:SessionConfiguration' :: forall a. IO a -> IO a
runDB = IO a -> IO a
forall a. a -> a
forall a. IO a -> IO a
id
}
where
SessionConfiguration {SessionPersistence
$sel:persistence:SessionConfiguration :: forall {k} (env :: k).
SessionConfiguration env -> SessionPersistence
persistence :: SessionPersistence
persistence, Options IO IO
$sel:options:SessionConfiguration :: forall {k} (env :: k). SessionConfiguration env -> Options IO IO
options :: Options IO IO
options} = SessionConfiguration Client
configuration