{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE DerivingVia #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TemplateHaskell #-} module Options ( Options(..) , options , Options.Applicative.execParser , Config(..) , defaultConfig , configCodec , Pattern' ) where import Data.Text (Text) import GHC.Generics (Generic(..)) import Options.Applicative import Regex import Toml ((.=)) import qualified Data.Text as T import qualified Toml data Options = Options { originalInputFile :: FilePath , inputFile :: FilePath , outputFile :: FilePath } options :: ParserInfo Options options = info (options' <**> helper) ( fullDesc <> progDesc "Generates a servant API module" <> header "servant-serf" ) options' :: Parser Options options' = Options <$> strArgument ( metavar "ORIGINAL_INPUT_FILEPATH" ) <*> strArgument ( metavar "INPUT_FILEPATH" ) <*> strArgument ( metavar "OUTPUT_FILEPATH" ) data Config = Config { packageName :: Text , isHandlerModule :: Pattern' } deriving (Generic) configCodec :: Toml.TomlCodec Config configCodec = Config <$> Toml.text "package_name" .= packageName <*> patternCodec "is_handler_module" .= isHandlerModule defaultConfig :: Config defaultConfig = Config { packageName = "example" , isHandlerModule = either (error . T.unpack) id $ parseRegex' ".*Handler.*" }