{-# LANGUAGE OverloadedStrings #-} module App.Commands.Options.Parser where import Antiope.Core (FromText, Region (..), fromText) import Antiope.Options.Applicative import App.Commands.Options.Types (SyncFromArchiveOptions (..), SyncToArchiveOptions (..), VersionOptions (..)) import App.Static (homeDirectory) import Control.Applicative import HaskellWorks.CabalCache.Location (Location (..), toLocation, (</>)) import Options.Applicative import qualified Data.Text as Text import qualified Network.AWS.Types as AWS optsSyncFromArchive :: Parser SyncFromArchiveOptions optsSyncFromArchive = SyncFromArchiveOptions <$> option (auto <|> text) ( long "region" <> metavar "AWS_REGION" <> showDefault <> value Oregon <> help "The AWS region in which to operate" ) <*> option (maybeReader (toLocation . Text.pack)) ( long "archive-uri" <> help "Archive URI to sync to" <> metavar "S3_URI" <> value (Local $ homeDirectory </> ".cabal" </> "archive") ) <*> strOption ( long "store-path" <> help "Path to cabal store" <> metavar "DIRECTORY" <> value (homeDirectory </> ".cabal" </> "store") ) <*> optional ( strOption ( long "store-path-hash" <> help "Store path hash (do not use)" <> metavar "HASH" ) ) <*> option auto ( long "threads" <> help "Number of concurrent threads" <> metavar "NUM_THREADS" <> value 4 ) <*> optional ( option autoText ( long "aws-log-level" <> help "AWS Log Level. One of (Error, Info, Debug, Trace)" <> metavar "AWS_LOG_LEVEL" ) ) optsSyncToArchive :: Parser SyncToArchiveOptions optsSyncToArchive = SyncToArchiveOptions <$> option (auto <|> text) ( long "region" <> metavar "AWS_REGION" <> showDefault <> value Oregon <> help "The AWS region in which to operate" ) <*> option (maybeReader (toLocation . Text.pack)) ( long "archive-uri" <> help "Archive URI to sync to" <> metavar "S3_URI" <> value (Local $ homeDirectory </> ".cabal" </> "archive") ) <*> strOption ( long "store-path" <> help "Path to cabal store" <> metavar "DIRECTORY" <> value (homeDirectory </> ".cabal" </> "store") ) <*> optional ( strOption ( long "store-path-hash" <> help "Store path hash (do not use)" <> metavar "HASH" ) ) <*> option auto ( long "threads" <> help "Number of concurrent threads" <> metavar "NUM_THREADS" <> value 4 ) <*> optional ( option autoText ( long "aws-log-level" <> help "AWS Log Level. One of (Error, Info, Debug, Trace)" <> metavar "AWS_LOG_LEVEL" ) ) optsVersion :: Parser VersionOptions optsVersion = pure VersionOptions text :: FromText a => ReadM a text = eitherReader (fromText . Text.pack)