module Hasql.Pool.Config.Config where

import Hasql.Connection.Setting qualified as Connection.Setting
import Hasql.Pool.Config.Defaults qualified as Defaults
import Hasql.Pool.Observation (Observation)
import Hasql.Pool.Prelude
import Hasql.Session qualified as Session

-- | Configuration for Hasql connection pool.
data Config = Config
  { Config -> Int
size :: Int,
    Config -> DiffTime
acquisitionTimeout :: DiffTime,
    Config -> DiffTime
agingTimeout :: DiffTime,
    Config -> DiffTime
idlenessTimeout :: DiffTime,
    Config -> IO [Setting]
connectionSettingsProvider :: IO [Connection.Setting.Setting],
    Config -> Observation -> IO ()
observationHandler :: Observation -> IO (),
    Config -> Session ()
initSession :: Session.Session ()
  }

-- | Reasonable defaults, which can be built upon.
defaults :: Config
defaults :: Config
defaults =
  Config
    { size :: Int
size = Int
Defaults.size,
      acquisitionTimeout :: DiffTime
acquisitionTimeout = DiffTime
Defaults.acquisitionTimeout,
      agingTimeout :: DiffTime
agingTimeout = DiffTime
Defaults.agingTimeout,
      idlenessTimeout :: DiffTime
idlenessTimeout = DiffTime
Defaults.idlenessTimeout,
      connectionSettingsProvider :: IO [Setting]
connectionSettingsProvider = IO [Setting]
Defaults.dynamicConnectionSettings,
      observationHandler :: Observation -> IO ()
observationHandler = Observation -> IO ()
Defaults.observationHandler,
      initSession :: Session ()
initSession = Session ()
Defaults.initSession
    }