stackage2nix-0.4.0: src/Stack/Config/Yaml.hs
module Stack.Config.Yaml where
import Control.Applicative
import Control.Lens
import Data.Aeson
import Data.Aeson.TH
import Data.Text as T
import Stack.Config.TH
data Location a = Location
{ _lLocation :: !a
, _lExtraDep :: !(Maybe Bool)
, _lSubdirs :: !(Maybe [FilePath])
} deriving (Eq, Show)
makeLenses ''Location
deriveJSON jsonOpts ''Location
data Git = Git
{ _gGit :: !Text
, _gCommit :: !Text
} deriving (Eq, Show)
makeLenses ''Git
deriveJSON jsonOpts ''Git
data Hg = Hg
{ _hHg :: !Text
, _hCommit :: !Text
} deriving (Eq, Show)
makeLenses ''Hg
deriveJSON jsonOpts ''Hg
data Package
= Simple Text
| LocationSimple (Location Text)
| LocationGit (Location Git)
| LocationHg (Location Hg)
deriving (Eq, Show)
makePrisms ''Package
instance FromJSON Package where
parseJSON v =
(Simple <$> parseJSON v) <|>
(LocationSimple <$> parseJSON v) <|>
(LocationGit <$> parseJSON v) <|>
(LocationHg <$> parseJSON v)
instance ToJSON Package where
toJSON = \case
Simple t -> toJSON t
LocationSimple t -> toJSON t
LocationGit t -> toJSON t
LocationHg t -> toJSON t
data Config = Config
{ _cResolver :: !Text
, _cPackages :: !(Maybe [Package])
, _cExtraDeps :: !(Maybe [Text])
} deriving (Eq, Show)
makeLenses ''Config
deriveJSON jsonOpts ''Config