mirror of
https://github.com/nikita-volkov/hasql.git
synced 2024-11-22 01:52:45 +03:00
40 lines
1.3 KiB
Haskell
40 lines
1.3 KiB
Haskell
module Hasql.Settings where
|
|
|
|
import Data.ByteString qualified as B
|
|
import Data.ByteString.Builder qualified as BB
|
|
import Data.ByteString.Lazy qualified as BL
|
|
import Hasql.Prelude
|
|
|
|
-- |
|
|
-- All settings encoded in a single byte-string according to
|
|
-- <http://www.postgresql.org/docs/9.4/static/libpq-connect.html#LIBPQ-CONNSTRING the PostgreSQL format>.
|
|
type Settings =
|
|
ByteString
|
|
|
|
-- |
|
|
-- Encode a host, a port, a user, a password and a database into the PostgreSQL settings byte-string.
|
|
{-# INLINE settings #-}
|
|
settings :: ByteString -> Word16 -> ByteString -> ByteString -> ByteString -> Settings
|
|
settings host port user password database =
|
|
BL.toStrict
|
|
$ BB.toLazyByteString
|
|
$ mconcat
|
|
$ intersperse (BB.char7 ' ')
|
|
$ catMaybes
|
|
$ [ mappend (BB.string7 "host=")
|
|
. BB.byteString
|
|
<$> mfilter (not . B.null) (pure host),
|
|
mappend (BB.string7 "port=")
|
|
. BB.word16Dec
|
|
<$> mfilter (/= 0) (pure port),
|
|
mappend (BB.string7 "user=")
|
|
. BB.byteString
|
|
<$> mfilter (not . B.null) (pure user),
|
|
mappend (BB.string7 "password=")
|
|
. BB.byteString
|
|
<$> mfilter (not . B.null) (pure password),
|
|
mappend (BB.string7 "dbname=")
|
|
. BB.byteString
|
|
<$> mfilter (not . B.null) (pure database)
|
|
]
|