{-# OPTIONS_GHC -Wno-missing-import-lists #-}

-- | Convenience re-exports for the @orville-postgresql@ backend.
--
-- See "Arbiter.Orville.MonadArbiter" for integration details.
module Arbiter.Orville
  ( -- * Re-exports
    module Arbiter.Orville.MonadArbiter

    -- * Helper Functions
  , createOrvilleConnectionOptions
  ) where

import Arbiter.Core.PoolConfig (PoolConfig (..))
import Data.ByteString (ByteString)
import Data.ByteString.Char8 qualified as BS8
import Orville.PostgreSQL qualified as O

import Arbiter.Orville.MonadArbiter

-- | Create Orville ConnectionOptions from an Arbiter PoolConfig
createOrvilleConnectionOptions
  :: ByteString
  -- ^ PostgreSQL connection string
  -> PoolConfig
  -- ^ Arbiter pool configuration
  -> O.ConnectionOptions
createOrvilleConnectionOptions :: ByteString -> PoolConfig -> ConnectionOptions
createOrvilleConnectionOptions ByteString
connStr PoolConfig
config =
  let stripes :: StripeOption
stripes = StripeOption -> (Int -> StripeOption) -> Maybe Int -> StripeOption
forall b a. b -> (a -> b) -> Maybe a -> b
maybe StripeOption
O.OneStripePerCapability Int -> StripeOption
O.StripeCount (PoolConfig -> Maybe Int
poolStripes PoolConfig
config)
   in O.ConnectionOptions
        { connectionString :: String
O.connectionString = ByteString -> String
BS8.unpack ByteString
connStr
        , connectionNoticeReporting :: NoticeReporting
O.connectionNoticeReporting = NoticeReporting
O.DisableNoticeReporting
        , connectionPoolStripes :: StripeOption
O.connectionPoolStripes = StripeOption
stripes
        , connectionPoolLingerTime :: NominalDiffTime
O.connectionPoolLingerTime = Int -> NominalDiffTime
forall a b. (Integral a, Num b) => a -> b
fromIntegral (PoolConfig -> Int
poolIdleTimeout PoolConfig
config)
        , connectionPoolMaxConnections :: MaxConnections
O.connectionPoolMaxConnections = Int -> MaxConnections
O.MaxConnectionsTotal (PoolConfig -> Int
poolSize PoolConfig
config)
        }