module Data.PostgreSQL.Harness.Client
( ConnectionInformation(..)
, createTemporaryDatabase
, toConnectionString
) where
import Data.ByteString (ByteString)
import qualified Data.ByteString.Char8 as B8
import Network.HTTP (simpleHTTP, postRequest, getResponseBody)
data ConnectionInformation = ConnectionInformation
{ ciHost :: String
, ciPort :: String
, ciDatabaseName :: String
, ciUser :: String
, ciPassword :: String
}
createTemporaryDatabase :: String -> IO ConnectionInformation
createTemporaryDatabase url = do
rsp <- simpleHTTP (postRequest url)
body <- getResponseBody rsp
return $ parse body
where
parse :: String -> ConnectionInformation
parse s =
let (userPass, (_:hostPortDatabase)) = break ((==) '@') s in
let (user, (_:password)) = break ((==) ':') userPass in
let (hostPort, (_:databaseName)) = break ((==) '/') hostPortDatabase in
let (host, (_:port)) = break ((==) ':') hostPort in
ConnectionInformation host port databaseName user password
toConnectionString :: ConnectionInformation -> ByteString
toConnectionString (ConnectionInformation host port databaseName user password) =
B8.pack $
"host=" ++ host ++ " " ++
"port=" ++ port ++ " " ++
"dbname=" ++ databaseName ++ " " ++
"user=" ++ user ++ " " ++
"password=" ++ password