module Polysemy.Hasql.Effect.DbConnectionPool where

import Hasql.Connection (Connection)
import Polysemy.Db.Data.DbConfig (DbConfig)

import Polysemy.Hasql.Data.ConnectionTag (ConnectionTag)

data DbConnectionPool :: Effect where
  Acquire :: ConnectionTag -> DbConnectionPool m Connection
  Free :: ConnectionTag -> DbConnectionPool m ()
  Release :: ConnectionTag -> DbConnectionPool m ()
  Use :: ConnectionTag -> m a -> DbConnectionPool m a
  Kill :: ConnectionTag -> DbConnectionPool m ()
  UnsafeGet :: ConnectionTag -> DbConnectionPool m (Maybe Connection)
  Config :: DbConnectionPool m DbConfig

makeSem ''DbConnectionPool