conferer-0.1.0.1: src/Conferer/Provider/CLIArgs.hs
module Conferer.Provider.CLIArgs
(
-- * Command line arguments Provider
-- | This provider provides keys from the command line arguments passed into
-- the program. It only accepts arguments with @--@ and an equals, for
-- example: @./awesomeapp --warp.port=5000@
mkCLIArgsProvider
, mkCLIArgsProvider'
, parseArgsIntoKeyValue
)
where
import Data.Text (Text)
import qualified Data.Text as Text
import Data.Maybe (mapMaybe)
import Data.String (fromString)
import System.Environment (getArgs)
import Conferer.Types
import Conferer.Provider.Simple
-- | Create a 'ProviderCreator' for CLIArgs from a argument list
mkCLIArgsProvider' :: [String] -> ProviderCreator
mkCLIArgsProvider' args = \config -> do
let configMap = parseArgsIntoKeyValue args
mkMapProvider configMap config
-- | Same as 'mkCLIArgsProvider'' but using 'getArgs' to provide the argument
-- list
mkCLIArgsProvider :: ProviderCreator
mkCLIArgsProvider = \config -> do
args <- getArgs
mkCLIArgsProvider' args config
-- | Parse an argument list into a dictionary suitable for a 'Provider'
parseArgsIntoKeyValue :: [String] -> [(Key, Text)]
parseArgsIntoKeyValue =
fmap (\(k, s) -> (fromString $ Text.unpack k, s)) .
fmap (\s -> fmap (Text.drop 1) $ Text.breakOn "=" s).
mapMaybe (Text.stripPrefix "--") .
takeWhile (/= "--") .
fmap Text.pack