{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} module Stack.Types.ColorWhen ( ColorWhen (..) , readColorWhen ) where import Data.Aeson.Types ( FromJSON (..) ) import Options.Applicative ( ReadM ) import qualified Options.Applicative.Types as OA import Stack.Prelude data ColorWhen = ColorNever | ColorAlways | ColorAuto deriving (ColorWhen -> ColorWhen -> Bool (ColorWhen -> ColorWhen -> Bool) -> (ColorWhen -> ColorWhen -> Bool) -> Eq ColorWhen forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: ColorWhen -> ColorWhen -> Bool == :: ColorWhen -> ColorWhen -> Bool $c/= :: ColorWhen -> ColorWhen -> Bool /= :: ColorWhen -> ColorWhen -> Bool Eq, (forall x. ColorWhen -> Rep ColorWhen x) -> (forall x. Rep ColorWhen x -> ColorWhen) -> Generic ColorWhen forall x. Rep ColorWhen x -> ColorWhen forall x. ColorWhen -> Rep ColorWhen x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. ColorWhen -> Rep ColorWhen x from :: forall x. ColorWhen -> Rep ColorWhen x $cto :: forall x. Rep ColorWhen x -> ColorWhen to :: forall x. Rep ColorWhen x -> ColorWhen Generic, Int -> ColorWhen -> ShowS [ColorWhen] -> ShowS ColorWhen -> String (Int -> ColorWhen -> ShowS) -> (ColorWhen -> String) -> ([ColorWhen] -> ShowS) -> Show ColorWhen forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> ColorWhen -> ShowS showsPrec :: Int -> ColorWhen -> ShowS $cshow :: ColorWhen -> String show :: ColorWhen -> String $cshowList :: [ColorWhen] -> ShowS showList :: [ColorWhen] -> ShowS Show) instance FromJSON ColorWhen where parseJSON :: Value -> Parser ColorWhen parseJSON Value v = do String s <- Value -> Parser String forall a. FromJSON a => Value -> Parser a parseJSON Value v case String s of String "never" -> ColorWhen -> Parser ColorWhen forall a. a -> Parser a forall (f :: * -> *) a. Applicative f => a -> f a pure ColorWhen ColorNever String "always" -> ColorWhen -> Parser ColorWhen forall a. a -> Parser a forall (f :: * -> *) a. Applicative f => a -> f a pure ColorWhen ColorAlways String "auto" -> ColorWhen -> Parser ColorWhen forall a. a -> Parser a forall (f :: * -> *) a. Applicative f => a -> f a pure ColorWhen ColorAuto String _ -> String -> Parser ColorWhen forall a. String -> Parser a forall (m :: * -> *) a. MonadFail m => String -> m a fail (String "Unknown color use: " String -> ShowS forall a. Semigroup a => a -> a -> a <> String s String -> ShowS forall a. Semigroup a => a -> a -> a <> String ". Expected values of " String -> ShowS forall a. Semigroup a => a -> a -> a <> String "option are 'never', 'always', or 'auto'.") readColorWhen :: ReadM ColorWhen readColorWhen :: ReadM ColorWhen readColorWhen = do String s <- ReadM String OA.readerAsk case String s of String "never" -> ColorWhen -> ReadM ColorWhen forall a. a -> ReadM a forall (f :: * -> *) a. Applicative f => a -> f a pure ColorWhen ColorNever String "always" -> ColorWhen -> ReadM ColorWhen forall a. a -> ReadM a forall (f :: * -> *) a. Applicative f => a -> f a pure ColorWhen ColorAlways String "auto" -> ColorWhen -> ReadM ColorWhen forall a. a -> ReadM a forall (f :: * -> *) a. Applicative f => a -> f a pure ColorWhen ColorAuto String _ -> String -> ReadM ColorWhen forall a. String -> ReadM a OA.readerError String "Expected values of color option are 'never', \ \'always', or 'auto'."