packages feed

servant-auth-token-persistent 0.4.0.0 → 0.5.0.0

raw patch · 3 files changed

+44/−14 lines, 3 filesdep −persistent-postgresql

Dependencies removed: persistent-postgresql

Files

CHANGELOG.md view
@@ -1,3 +1,8 @@+0.5.0.0+=======++* MTL instances for `PersistentBackendT`. Use `liftDB` instead of removed `MonadReader SqlBackend` instance. + 0.3.2.0 ======= 
servant-auth-token-persistent.cabal view
@@ -1,5 +1,5 @@ name:                servant-auth-token-persistent-version:             0.4.0.0+version:             0.5.0.0 synopsis:            Persistent backend for servant-auth-token server description:         Please see README.md homepage:            https://github.com/ncrashed/servant-auth-token#readme@@ -29,7 +29,6 @@     , monad-control           >= 1.0    && < 1.1     , mtl                     >= 2.2    && < 2.3     , persistent              >= 2.2    && < 2.7-    , persistent-postgresql   >= 2.2    && < 2.7     , persistent-template     >= 2.1    && < 2.7     , servant-server          >= 0.9    && < 0.10     , servant-auth-token      >= 0.4    && < 0.5
src/Servant/Server/Auth/Token/Persistent.hs view
@@ -1,11 +1,18 @@+{-# LANGUAGE UndecidableInstances #-}+ module Servant.Server.Auth.Token.Persistent(     PersistentBackendT   , runPersistentBackendT+  , liftDB   ) where +import Control.Monad.Cont.Class (MonadCont(..))+import Control.Monad.Except import Control.Monad.Reader+import Control.Monad.RWS.Class (MonadRWS)+import Control.Monad.State.Class (MonadState(state)) import Control.Monad.Trans.Control-import Control.Monad.Except+import Control.Monad.Writer.Class (MonadWriter(..)) import Data.Aeson.WithField import Database.Persist import Database.Persist.Sql@@ -17,20 +24,39 @@ import qualified Servant.Server.Auth.Token.Persistent.Schema as S  -- | Monad transformer that implements storage backend-newtype PersistentBackendT m a = PersistentBackendT { unPersistentBackendT :: ReaderT (AuthConfig, ConnectionPool) (ExceptT ServantErr (SqlPersistT m)) a }-  deriving (Functor, Applicative, Monad, MonadIO, MonadError ServantErr)+newtype PersistentBackendT m a = PersistentBackendT { unPersistentBackendT :: PersistentBackendInternal m a }+  deriving (Functor, Applicative, Monad, MonadIO, MonadCont, MonadError ServantErr) -instance Monad m => MonadReader SqlBackend (PersistentBackendT m) where-  ask = PersistentBackendT $ lift . lift $ ask-  local f m = do-    (cfg, pool) <- PersistentBackendT ask-    em <- PersistentBackendT . lift . lift $ local f $ runExceptT $ runReaderT (unPersistentBackendT m) (cfg, pool)-    case em of-      Left er -> PersistentBackendT . lift $ throwError er-      Right m' -> return m'+type PersistentBackendInternal m = ReaderT (AuthConfig, ConnectionPool) (ExceptT ServantErr (SqlPersistT m))  instance Monad m => HasAuthConfig (PersistentBackendT m) where-  getAuthConfig = fmap fst $ PersistentBackendT ask+  getAuthConfig = PersistentBackendT $ asks fst++instance MonadTrans PersistentBackendT where+  lift = PersistentBackendT . lift . lift . lift++instance (MonadReader r m) => MonadReader r (PersistentBackendT m) where+  ask   = lift ask+  local = mapPersistentBackendT . local++instance (MonadState s m) => MonadState s (PersistentBackendT m) where+  state = lift . state++instance (MonadWriter w m) => MonadWriter w (PersistentBackendT m) where+  writer = lift . writer+  tell   = lift . tell+  listen = unwrapPersistentBackendT listen+  pass   = unwrapPersistentBackendT pass++instance (MonadRWS r w s m) => MonadRWS r w s (PersistentBackendT m)++mapPersistentBackendT :: (m (Either ServantErr a) -> n (Either ServantErr b))+                         -> PersistentBackendT m a -> PersistentBackendT n b+mapPersistentBackendT f = unwrapPersistentBackendT (mapReaderT (mapExceptT (mapReaderT f)))++unwrapPersistentBackendT :: (PersistentBackendInternal m a -> PersistentBackendInternal n b)+                            -> PersistentBackendT m a -> PersistentBackendT n b+unwrapPersistentBackendT f = PersistentBackendT . f . unPersistentBackendT  -- | Execute backend action with given connection pool. runPersistentBackendT :: MonadBaseControl IO m => AuthConfig -> ConnectionPool -> PersistentBackendT m a -> m (Either ServantErr a)