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