module Hasql.OptparseApplicative where import BasePrelude hiding (option) import Options.Applicative import qualified Hasql.Connection as A import qualified Hasql.Pool as B -- | -- Given a function, which updates the long names produces a parser of @B.'B.Settings'@. -- 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 B.Settings poolSettings updatedName = (,,) <$> size <*> timeout <*> connectionSettings updatedName where size = option auto $ long (updatedName "pool-size") <> value 1 <> showDefault <> help "Amount of connections in the pool" timeout = fmap fromIntegral $ option auto $ long (updatedName "pool-timeout") <> value 10 <> showDefault <> help "Amount of seconds for which the unused connections are kept open" -- | -- Given a function, which updates the long names produces a parser of @A.'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"