{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Stack.Types.GhcOptionKey
( GhcOptionKey (..)
) where
import Data.Aeson.Types ( FromJSONKey (..), FromJSONKeyFunction (..) )
import qualified Data.Text as T
import Stack.Prelude
data GhcOptionKey
= GOKOldEverything
| GOKEverything
| GOKLocals
| GOKTargets
| GOKPackage !PackageName
deriving (GhcOptionKey -> GhcOptionKey -> Bool
(GhcOptionKey -> GhcOptionKey -> Bool)
-> (GhcOptionKey -> GhcOptionKey -> Bool) -> Eq GhcOptionKey
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: GhcOptionKey -> GhcOptionKey -> Bool
== :: GhcOptionKey -> GhcOptionKey -> Bool
$c/= :: GhcOptionKey -> GhcOptionKey -> Bool
/= :: GhcOptionKey -> GhcOptionKey -> Bool
Eq, Eq GhcOptionKey
Eq GhcOptionKey =>
(GhcOptionKey -> GhcOptionKey -> Ordering)
-> (GhcOptionKey -> GhcOptionKey -> Bool)
-> (GhcOptionKey -> GhcOptionKey -> Bool)
-> (GhcOptionKey -> GhcOptionKey -> Bool)
-> (GhcOptionKey -> GhcOptionKey -> Bool)
-> (GhcOptionKey -> GhcOptionKey -> GhcOptionKey)
-> (GhcOptionKey -> GhcOptionKey -> GhcOptionKey)
-> Ord GhcOptionKey
GhcOptionKey -> GhcOptionKey -> Bool
GhcOptionKey -> GhcOptionKey -> Ordering
GhcOptionKey -> GhcOptionKey -> GhcOptionKey
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
$ccompare :: GhcOptionKey -> GhcOptionKey -> Ordering
compare :: GhcOptionKey -> GhcOptionKey -> Ordering
$c< :: GhcOptionKey -> GhcOptionKey -> Bool
< :: GhcOptionKey -> GhcOptionKey -> Bool
$c<= :: GhcOptionKey -> GhcOptionKey -> Bool
<= :: GhcOptionKey -> GhcOptionKey -> Bool
$c> :: GhcOptionKey -> GhcOptionKey -> Bool
> :: GhcOptionKey -> GhcOptionKey -> Bool
$c>= :: GhcOptionKey -> GhcOptionKey -> Bool
>= :: GhcOptionKey -> GhcOptionKey -> Bool
$cmax :: GhcOptionKey -> GhcOptionKey -> GhcOptionKey
max :: GhcOptionKey -> GhcOptionKey -> GhcOptionKey
$cmin :: GhcOptionKey -> GhcOptionKey -> GhcOptionKey
min :: GhcOptionKey -> GhcOptionKey -> GhcOptionKey
Ord)
instance FromJSONKey GhcOptionKey where
fromJSONKey :: FromJSONKeyFunction GhcOptionKey
fromJSONKey = (Text -> Parser GhcOptionKey) -> FromJSONKeyFunction GhcOptionKey
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((Text -> Parser GhcOptionKey) -> FromJSONKeyFunction GhcOptionKey)
-> (Text -> Parser GhcOptionKey)
-> FromJSONKeyFunction GhcOptionKey
forall a b. (a -> b) -> a -> b
$ \Text
t ->
case Text
t of
Text
"*" -> GhcOptionKey -> Parser GhcOptionKey
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure GhcOptionKey
GOKOldEverything
Text
"$everything" -> GhcOptionKey -> Parser GhcOptionKey
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure GhcOptionKey
GOKEverything
Text
"$locals" -> GhcOptionKey -> Parser GhcOptionKey
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure GhcOptionKey
GOKLocals
Text
"$targets" -> GhcOptionKey -> Parser GhcOptionKey
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure GhcOptionKey
GOKTargets
Text
_ ->
case [Char] -> Maybe PackageName
parsePackageName ([Char] -> Maybe PackageName) -> [Char] -> Maybe PackageName
forall a b. (a -> b) -> a -> b
$ Text -> [Char]
T.unpack Text
t of
Maybe PackageName
Nothing -> [Char] -> Parser GhcOptionKey
forall a. [Char] -> Parser a
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail ([Char] -> Parser GhcOptionKey) -> [Char] -> Parser GhcOptionKey
forall a b. (a -> b) -> a -> b
$ [Char]
"Invalid package name: " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Text -> [Char]
forall a. Show a => a -> [Char]
show Text
t
Just PackageName
x -> GhcOptionKey -> Parser GhcOptionKey
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (GhcOptionKey -> Parser GhcOptionKey)
-> GhcOptionKey -> Parser GhcOptionKey
forall a b. (a -> b) -> a -> b
$ PackageName -> GhcOptionKey
GOKPackage PackageName
x
fromJSONKeyList :: FromJSONKeyFunction [GhcOptionKey]
fromJSONKeyList =
(Text -> Parser [GhcOptionKey])
-> FromJSONKeyFunction [GhcOptionKey]
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((Text -> Parser [GhcOptionKey])
-> FromJSONKeyFunction [GhcOptionKey])
-> (Text -> Parser [GhcOptionKey])
-> FromJSONKeyFunction [GhcOptionKey]
forall a b. (a -> b) -> a -> b
$ \Text
_ -> [Char] -> Parser [GhcOptionKey]
forall a. [Char] -> Parser a
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail [Char]
"GhcOptionKey.fromJSONKeyList"