{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}

module Stack.Types.ApplyProgOptions
  ( ApplyProgOptions (..)
  ) where

import           Pantry.Internal.AesonExtended ( FromJSON (..), withText )
import           Stack.Prelude

-- | Which packages do all and any --PROG-option options on the command line

-- apply to?

data ApplyProgOptions
  = APOTargets -- ^ All local packages that are targets.

  | APOLocals -- ^ All local packages (targets or otherwise).

  | APOEverything -- ^ All packages (local or otherwise).

  deriving (ApplyProgOptions
forall a. a -> a -> Bounded a
maxBound :: ApplyProgOptions
$cmaxBound :: ApplyProgOptions
minBound :: ApplyProgOptions
$cminBound :: ApplyProgOptions
Bounded, Int -> ApplyProgOptions
ApplyProgOptions -> Int
ApplyProgOptions -> [ApplyProgOptions]
ApplyProgOptions -> ApplyProgOptions
ApplyProgOptions -> ApplyProgOptions -> [ApplyProgOptions]
ApplyProgOptions
-> ApplyProgOptions -> ApplyProgOptions -> [ApplyProgOptions]
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: ApplyProgOptions
-> ApplyProgOptions -> ApplyProgOptions -> [ApplyProgOptions]
$cenumFromThenTo :: ApplyProgOptions
-> ApplyProgOptions -> ApplyProgOptions -> [ApplyProgOptions]
enumFromTo :: ApplyProgOptions -> ApplyProgOptions -> [ApplyProgOptions]
$cenumFromTo :: ApplyProgOptions -> ApplyProgOptions -> [ApplyProgOptions]
enumFromThen :: ApplyProgOptions -> ApplyProgOptions -> [ApplyProgOptions]
$cenumFromThen :: ApplyProgOptions -> ApplyProgOptions -> [ApplyProgOptions]
enumFrom :: ApplyProgOptions -> [ApplyProgOptions]
$cenumFrom :: ApplyProgOptions -> [ApplyProgOptions]
fromEnum :: ApplyProgOptions -> Int
$cfromEnum :: ApplyProgOptions -> Int
toEnum :: Int -> ApplyProgOptions
$ctoEnum :: Int -> ApplyProgOptions
pred :: ApplyProgOptions -> ApplyProgOptions
$cpred :: ApplyProgOptions -> ApplyProgOptions
succ :: ApplyProgOptions -> ApplyProgOptions
$csucc :: ApplyProgOptions -> ApplyProgOptions
Enum, ApplyProgOptions -> ApplyProgOptions -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ApplyProgOptions -> ApplyProgOptions -> Bool
$c/= :: ApplyProgOptions -> ApplyProgOptions -> Bool
== :: ApplyProgOptions -> ApplyProgOptions -> Bool
$c== :: ApplyProgOptions -> ApplyProgOptions -> Bool
Eq, Eq ApplyProgOptions
ApplyProgOptions -> ApplyProgOptions -> Bool
ApplyProgOptions -> ApplyProgOptions -> Ordering
ApplyProgOptions -> ApplyProgOptions -> ApplyProgOptions
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: ApplyProgOptions -> ApplyProgOptions -> ApplyProgOptions
$cmin :: ApplyProgOptions -> ApplyProgOptions -> ApplyProgOptions
max :: ApplyProgOptions -> ApplyProgOptions -> ApplyProgOptions
$cmax :: ApplyProgOptions -> ApplyProgOptions -> ApplyProgOptions
>= :: ApplyProgOptions -> ApplyProgOptions -> Bool
$c>= :: ApplyProgOptions -> ApplyProgOptions -> Bool
> :: ApplyProgOptions -> ApplyProgOptions -> Bool
$c> :: ApplyProgOptions -> ApplyProgOptions -> Bool
<= :: ApplyProgOptions -> ApplyProgOptions -> Bool
$c<= :: ApplyProgOptions -> ApplyProgOptions -> Bool
< :: ApplyProgOptions -> ApplyProgOptions -> Bool
$c< :: ApplyProgOptions -> ApplyProgOptions -> Bool
compare :: ApplyProgOptions -> ApplyProgOptions -> Ordering
$ccompare :: ApplyProgOptions -> ApplyProgOptions -> Ordering
Ord, ReadPrec [ApplyProgOptions]
ReadPrec ApplyProgOptions
Int -> ReadS ApplyProgOptions
ReadS [ApplyProgOptions]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ApplyProgOptions]
$creadListPrec :: ReadPrec [ApplyProgOptions]
readPrec :: ReadPrec ApplyProgOptions
$creadPrec :: ReadPrec ApplyProgOptions
readList :: ReadS [ApplyProgOptions]
$creadList :: ReadS [ApplyProgOptions]
readsPrec :: Int -> ReadS ApplyProgOptions
$creadsPrec :: Int -> ReadS ApplyProgOptions
Read, Int -> ApplyProgOptions -> ShowS
[ApplyProgOptions] -> ShowS
ApplyProgOptions -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [ApplyProgOptions] -> ShowS
$cshowList :: [ApplyProgOptions] -> ShowS
show :: ApplyProgOptions -> [Char]
$cshow :: ApplyProgOptions -> [Char]
showsPrec :: Int -> ApplyProgOptions -> ShowS
$cshowsPrec :: Int -> ApplyProgOptions -> ShowS
Show)

instance FromJSON ApplyProgOptions where
  parseJSON :: Value -> Parser ApplyProgOptions
parseJSON = forall a. [Char] -> (Text -> Parser a) -> Value -> Parser a
withText [Char]
"ApplyProgOptions" forall a b. (a -> b) -> a -> b
$ \Text
t ->
    case Text
t of
      Text
"targets" -> forall (f :: * -> *) a. Applicative f => a -> f a
pure ApplyProgOptions
APOTargets
      Text
"locals" -> forall (f :: * -> *) a. Applicative f => a -> f a
pure ApplyProgOptions
APOLocals
      Text
"everything" -> forall (f :: * -> *) a. Applicative f => a -> f a
pure ApplyProgOptions
APOEverything
      Text
_ -> forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail forall a b. (a -> b) -> a -> b
$ [Char]
"Invalid ApplyProgOptions: " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> [Char]
show Text
t