module OptimaForHasql.ParamGroup where

import qualified Hasql.Connection as Connection
import qualified Hasql.Pool as Pool
import Optima
import qualified OptimaForHasql.Param as Param
import OptimaForHasql.Prelude

-- |
-- Parser of pool settings as a parameter group.
--
-- Produces a pool acquisition action.
poolAcquirer :: ParamGroup (IO Pool.Pool)
poolAcquirer :: ParamGroup (IO Pool)
poolAcquirer =
  Int -> Maybe Int -> Settings -> IO Pool
Pool.acquire
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. Text -> Param a -> ParamGroup a
member Text
"pool-size" Param Int
Param.poolSize
    forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. Text -> Param a -> ParamGroup a
member Text
"pool-acquisition-timeout" Param (Maybe Int)
Param.poolAcquisitionTimeout
    forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ParamGroup Settings
connectionSettings

-- |
-- Parser of connection settings as a parameter group.
connectionSettings :: ParamGroup Connection.Settings
connectionSettings :: ParamGroup Settings
connectionSettings =
  Settings -> Word16 -> Settings -> Settings -> Settings -> Settings
Connection.settings
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. Text -> Param a -> ParamGroup a
member Text
"host" Param Settings
Param.host
    forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. Text -> Param a -> ParamGroup a
member Text
"port" Param Word16
Param.port
    forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. Text -> Param a -> ParamGroup a
member Text
"user" Param Settings
Param.user
    forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. Text -> Param a -> ParamGroup a
member Text
"password" Param Settings
Param.password
    forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. Text -> Param a -> ParamGroup a
member Text
"database" Param Settings
Param.database