module Hasql.OptparseApplicative where import BasePrelude hiding (option) import qualified Hasql.Connection as A import qualified Hasql.Pool as B import Options.Applicative -- | Given a function, which updates the long names, produces a parser of -- the @Hasql.Pool.'acquire'@ operation. -- -- You can use this function to prefix the name or you can just specify 'id', -- if you don't want it changed. poolSettings :: (String -> String) -> Parser (IO B.Pool) poolSettings updatedName = B.acquire <$> size <*> connectionSettings updatedName where size = option auto $ long (updatedName "pool-size") <> value 1 <> showDefault <> help "Amount of connections in the pool" -- | Given a function, which updates the long names produces a parser -- of @Hasql.Connection.'A.Settings'@. -- -- You can use this function to prefix the name or you can just specify 'id', -- if you don't want it changed. connectionSettings :: (String -> String) -> Parser A.Settings connectionSettings updatedName = A.settings <$> host <*> port <*> user <*> password <*> database where host = fmap fromString $ strOption $ long (updatedName "host") <> value "127.0.0.1" <> showDefault <> help "Server host" port = option auto $ long (updatedName "port") <> value 5432 <> showDefault <> help "Server port" user = fmap fromString $ strOption $ long (updatedName "user") <> value "postgres" <> showDefault <> help "Username" password = fmap fromString $ strOption $ long (updatedName "password") <> value "" <> showDefault <> help "Password" database = fmap fromString $ strOption $ long (updatedName "database") <> help "Database name"