module OptimaForHasql.Params 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 top-level parameters.
--
-- Produces a pool acquisition action.
poolAcquirer :: Params (IO Pool.Pool)
poolAcquirer :: Params (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. Maybe Char -> Text -> Param a -> Params a
param forall a. Maybe a
Nothing Text
"pool-size" Param Int
Param.poolSize
    forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. Maybe Char -> Text -> Param a -> Params a
param forall a. Maybe a
Nothing Text
"pool-acquisition-timeout" Param (Maybe Int)
Param.poolAcquisitionTimeout
    forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Params Settings
connectionSettings

-- |
-- Parser of connection settings as top-level parameters.
connectionSettings :: Params Connection.Settings
connectionSettings :: Params Settings
connectionSettings =
  Settings -> Word16 -> Settings -> Settings -> Settings -> Settings
Connection.settings
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. Maybe Char -> Text -> Param a -> Params a
param forall a. Maybe a
Nothing Text
"host" Param Settings
Param.host
    forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. Maybe Char -> Text -> Param a -> Params a
param forall a. Maybe a
Nothing Text
"port" Param Word16
Param.port
    forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. Maybe Char -> Text -> Param a -> Params a
param forall a. Maybe a
Nothing Text
"user" Param Settings
Param.user
    forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. Maybe Char -> Text -> Param a -> Params a
param forall a. Maybe a
Nothing Text
"password" Param Settings
Param.password
    forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. Maybe Char -> Text -> Param a -> Params a
param forall a. Maybe a
Nothing Text
"database" Param Settings
Param.database