pg-recorder-0.2.0.0: src/PgRecorder/Config.hs
module PgRecorder.Config ( prettyVersion
, minimumPgVersion
, readOptions
, AppConfig (..)
) where
import PgRecorder.Prelude
import qualified Data.Text as T
import Data.Version (versionBranch)
import Options.Applicative
import Options.Applicative.Text
import Paths_pg_recorder (version)
-- | Data type to store all command line options
data AppConfig = AppConfig { configDatabase :: Text
, channel :: Text
, dispatcherFunction :: Text
}
argParser :: Parser AppConfig
argParser = AppConfig
<$> argument text (help "(REQUIRED) database connection string, e.g. postgres://user:pass@host:port/db" <> metavar "DB_URL")
<*> textOption (long "channel" <> short 'c' <> help "(REQUIRED) channel to listen to notifications for async commands" <> metavar "CHANNEL")
<*> textOption (long "dispatcher-function" <> short 'f' <> help "(REQUIRED) function called to dispatch notifications for async commands" <> metavar "DISPATCHER_FUNCTION")
-- | User friendly version number
prettyVersion :: Text
prettyVersion = T.intercalate "." $ show <$> versionBranch version
-- | Tells the minimum PostgreSQL version required by this version of Haskell Tools
minimumPgVersion :: Integer
minimumPgVersion = 90500
-- | Function to read and parse options from the command line
readOptions :: IO AppConfig
readOptions = customExecParser parserPrefs opts
where
opts = info (helper <*> argParser) $
fullDesc
<> (progDesc . toS) (
("pg-recorder " :: Text)
<> prettyVersion
<> (" / Records database notifications" :: Text)
)
parserPrefs = prefs showHelpOnError