module Stackctl.TagOption ( tagOption ) where import Stackctl.Prelude import qualified Data.Text as T import Options.Applicative import Stackctl.AWS.CloudFormation (Tag, newTag) tagOption :: Parser Tag tagOption :: Parser Tag tagOption = forall a. ReadM a -> Mod OptionFields a -> Parser a option (forall a. (String -> Either String a) -> ReadM a eitherReader String -> Either String Tag readTag) forall a b. (a -> b) -> a -> b $ forall a. Monoid a => [a] -> a mconcat [ forall (f :: * -> *) a. HasName f => Char -> Mod f a short Char 't' , forall (f :: * -> *) a. HasName f => String -> Mod f a long String "tag" , forall (f :: * -> *) a. HasMetavar f => String -> Mod f a metavar String "KEY=[VALUE]" , forall (f :: * -> *) a. String -> Mod f a help String "Override the given Tag for this operation" ] readTag :: String -> Either String Tag readTag :: String -> Either String Tag readTag String s = case Text -> Text -> (Text, Text) T.breakOn Text "=" Text t of (Text _, Text v) | Text -> Bool T.null Text v -> forall a b. a -> Either a b Left forall a b. (a -> b) -> a -> b $ String "No '=' found (" forall a. Semigroup a => a -> a -> a <> String s forall a. Semigroup a => a -> a -> a <> String ")" (Text k, Text _) | Text -> Bool T.null Text k -> forall a b. a -> Either a b Left forall a b. (a -> b) -> a -> b $ String "Empty key (" forall a. Semigroup a => a -> a -> a <> String s forall a. Semigroup a => a -> a -> a <> String ")" (Text k, Text "=") -> forall a b. b -> Either a b Right forall a b. (a -> b) -> a -> b $ Text -> Text -> Tag newTag Text k Text "" (Text k, Text v) -> forall a b. b -> Either a b Right forall a b. (a -> b) -> a -> b $ Text -> Text -> Tag newTag Text k forall a b. (a -> b) -> a -> b $ Int -> Text -> Text T.drop Int 1 Text v where t :: Text t = String -> Text pack String s