content: {-# LANGUAGE NoImplicitPrelude #-}
  module Stackage.Types
    ( BuildPlan (..)
    , SystemInfo (..)
    , PackagePlan (..)
    , DocMap
    , PackageDocs (..)
    ) where
  
  import ClassyPrelude.Conduit
  import Data.Aeson
  import Pantry.Internal.Stackage (PackageNameP(..), VersionP(..))
  
  data BuildPlan = BuildPlan
      { bpSystemInfo :: !SystemInfo
      , bpPackages :: !(Map PackageNameP PackagePlan)
      }
  instance FromJSON BuildPlan where
      parseJSON = withObject "BuildPlan" $ \o -> BuildPlan
          <$> o .: "system-info"
          <*> o .: "packages"
  
  data SystemInfo = SystemInfo
      { siGhcVersion :: !VersionP
      , siCorePackages :: !(Map PackageNameP VersionP)
      }
  instance FromJSON SystemInfo where
      parseJSON = withObject "SystemInfo" $ \o -> SystemInfo
          <$> o .: "ghc-version"
          <*> o .: "core-packages"
  
  newtype PackagePlan = PackagePlan
      { ppVersion :: VersionP
      }
  instance FromJSON PackagePlan where
      parseJSON = withObject "PackagePlan" $ \o -> PackagePlan <$> o .: "version"
  
  type DocMap = Map Text PackageDocs
  
  data PackageDocs = PackageDocs
      { pdVersion :: !Text
      , pdModules :: !(Map Text [Text])
      }
  instance FromJSON PackageDocs where
      parseJSON = withObject "PackageDocs" $ \o -> PackageDocs
          <$> o .: "version"
          <*> o .: "modules"
  
  