{-# LANGUAGE OverloadedStrings #-} module Config ( parserOpts , AppConfig(..) ) where import Options.Applicative import Data.Text (Text) data AppConfig = AppConfig { appPort :: Int , appDbFile :: FilePath , appUser :: Text , appPassHash :: Text } deriving (Show, Eq) appConfig :: Parser AppConfig appConfig = AppConfig <$> option auto ( long "port" <> help "port to listen" <> showDefault <> value 8000 <> metavar "INT") <*> strOption ( long "dbpath" <> help "sqlite db file path" <> showDefault <> value "quotes.db" <> metavar "TARGET") <*> strOption ( long "user" <> help "basic auth user (for writes)" <> showDefault <> value "root" <> metavar "USER") <*> strOption ( long "password" <> help "password hash for basic auth user, generate with argon2") parserOpts :: ParserInfo AppConfig parserOpts = info (appConfig <**> helper) ( fullDesc <> progDesc "Serve Quotes API" <> header "quotes api" )