{-# 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'."