packages feed

stackctl-1.1.1.0: src/Stackctl/ParameterOption.hs

module Stackctl.ParameterOption
  ( parameterOption
  ) where

import Stackctl.Prelude

import qualified Data.Text as T
import Options.Applicative
import Stackctl.AWS.CloudFormation (Parameter, makeParameter)

parameterOption :: Parser Parameter
parameterOption = option (eitherReader readParameter) $ mconcat
  [ short 'p'
  , long "parameter"
  , metavar "KEY=[VALUE]"
  , help "Override the given Parameter for this operation"
  ]

readParameter :: String -> Either String Parameter
readParameter s = case T.breakOn "=" t of
  (_, v) | T.null v -> Left $ "No '=' found (" <> s <> ")"
  (k, _) | T.null k -> Left $ "Empty key (" <> s <> ")"
  (k, "=") -> Right $ makeParameter k $ Just ""
  (k, v) -> Right $ makeParameter k $ Just $ T.drop 1 v
  where t = pack s