From 490c951d4acb9dc5791d72ea40364cab938d5c0a Mon Sep 17 00:00:00 2001 From: Ben Levy Date: Tue, 20 Aug 2024 15:50:10 +0000 Subject: [PATCH 1/2] Add support for persistent-2.14 to serversession-backend-persistent --- .../serversession-backend-persistent.cabal | 4 +- .../Backend/Persistent/Internal/Impl.hs | 52 ++++++++++++------- 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/serversession-backend-persistent/serversession-backend-persistent.cabal b/serversession-backend-persistent/serversession-backend-persistent.cabal index b10451a..453efe6 100644 --- a/serversession-backend-persistent/serversession-backend-persistent.cabal +++ b/serversession-backend-persistent/serversession-backend-persistent.cabal @@ -1,6 +1,6 @@ cabal-version: >= 1.10 name: serversession-backend-persistent -version: 2.0.1 +version: 2.0.2 license: MIT license-file: LICENSE author: Felipe Lessa @@ -28,7 +28,7 @@ library , bytestring , cereal >= 0.4 , path-pieces - , persistent == 2.13.* + , persistent >= 2.13.0.0 && < 2.15.0.0 , tagged >= 0.7 , text , time diff --git a/serversession-backend-persistent/src/Web/ServerSession/Backend/Persistent/Internal/Impl.hs b/serversession-backend-persistent/src/Web/ServerSession/Backend/Persistent/Internal/Impl.hs index a927319..0c17cec 100644 --- a/serversession-backend-persistent/src/Web/ServerSession/Backend/Persistent/Internal/Impl.hs +++ b/serversession-backend-persistent/src/Web/ServerSession/Backend/Persistent/Internal/Impl.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} -- | Internal module exposing the guts of the package. Use at -- your own risk. No API stability guarantees apply. module Web.ServerSession.Backend.Persistent.Internal.Impl @@ -14,25 +15,26 @@ module Web.ServerSession.Backend.Persistent.Internal.Impl , throwSS ) where -import Control.Applicative as A -import Control.Monad (void) -import Control.Monad.IO.Class (liftIO) -import Data.Proxy (Proxy(..)) -import Data.Time (UTCTime) -import Data.Typeable (Typeable) -import Database.Persist (PersistEntity(..)) -import Web.PathPieces (PathPiece) -import Web.ServerSession.Core - -import qualified Control.Exception as E -import qualified Data.Aeson as A -import qualified Data.Text as T -import qualified Database.Persist as P -import qualified Database.Persist.EntityDef.Internal as P (EntityDef(..)) -- I need EntityDef constructor. -import qualified Database.Persist.Quasi.Internal as P (UnboundEntityDef, unbindEntityDef) -import qualified Database.Persist.Sql as P - -import Web.ServerSession.Backend.Persistent.Internal.Types +import Control.Applicative as A +import Control.Monad (void) +import Control.Monad.IO.Class (liftIO) +import Data.Proxy (Proxy (..)) +import Data.Time (UTCTime) +import Data.Typeable (Typeable) +import Database.Persist (PersistEntity (..)) +import Web.PathPieces (PathPiece) +import Web.ServerSession.Core + +import qualified Control.Exception as E +import qualified Data.Aeson as A +import qualified Data.Text as T +import qualified Database.Persist as P +import qualified Database.Persist.EntityDef.Internal as P (EntityDef (..)) +import qualified Database.Persist.Quasi.Internal as P (UnboundEntityDef, + unbindEntityDef) +import qualified Database.Persist.Sql as P + +import Web.ServerSession.Backend.Persistent.Internal.Types -- We can't use the Template Haskell since we want to generalize -- some fields. @@ -57,6 +59,9 @@ deriving instance Eq (Decomposed sess) => Eq (PersistentSession sess) deriving instance Ord (Decomposed sess) => Ord (PersistentSession sess) deriving instance Show (Decomposed sess) => Show (PersistentSession sess) +#if MIN_VERSION_persistent(2,14,0) +instance P.SafeToInsert (PersistentSession sess) +#endif type PersistentSessionId sess = Key (PersistentSession sess) @@ -105,12 +110,21 @@ instance forall sess. P.PersistFieldSql (Decomposed sess) => P.PersistEntity (Pe where pfd :: P.EntityField (PersistentSession sess) typ -> P.FieldDef pfd = P.persistFieldDef +#if MIN_VERSION_persistent(2,14,0) toPersistFields (PersistentSession a b c d e) = + [ P.toPersistValue a + , P.toPersistValue b + , P.toPersistValue c + , P.toPersistValue d + , P.toPersistValue e ] +#else + toPersistValues (PersistentSession a b c d e) = [ P.SomePersistField a , P.SomePersistField b , P.SomePersistField c , P.SomePersistField d , P.SomePersistField e ] +#endif fromPersistValues [a, b, c, d, e] = PersistentSession From ccef10415aa86912d476ccef90976f46daa6dbad Mon Sep 17 00:00:00 2001 From: Ben Levy Date: Fri, 23 Aug 2024 19:06:56 +0000 Subject: [PATCH 2/2] Fix <2.14 branch error (toPersistFields was accidentally renamed toPersistValues) --- .../src/Web/ServerSession/Backend/Persistent/Internal/Impl.hs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/serversession-backend-persistent/src/Web/ServerSession/Backend/Persistent/Internal/Impl.hs b/serversession-backend-persistent/src/Web/ServerSession/Backend/Persistent/Internal/Impl.hs index 0c17cec..fd7bfd4 100644 --- a/serversession-backend-persistent/src/Web/ServerSession/Backend/Persistent/Internal/Impl.hs +++ b/serversession-backend-persistent/src/Web/ServerSession/Backend/Persistent/Internal/Impl.hs @@ -110,15 +110,14 @@ instance forall sess. P.PersistFieldSql (Decomposed sess) => P.PersistEntity (Pe where pfd :: P.EntityField (PersistentSession sess) typ -> P.FieldDef pfd = P.persistFieldDef -#if MIN_VERSION_persistent(2,14,0) toPersistFields (PersistentSession a b c d e) = +#if MIN_VERSION_persistent(2,14,0) [ P.toPersistValue a , P.toPersistValue b , P.toPersistValue c , P.toPersistValue d , P.toPersistValue e ] #else - toPersistValues (PersistentSession a b c d e) = [ P.SomePersistField a , P.SomePersistField b , P.SomePersistField c