module Jenga.HTTP where
import Control.Monad (when, void)
import Data.Aeson (eitherDecode')
import Network.HTTP.Client.Conduit
import Network.HTTP.Types.Header (hAccept)
import Network.HTTP.Types.Status (status200)
import Jenga.PackageList
newtype StackResolver
= StackResolver String
deriving (Eq, Show)
stackageUrl :: String
stackageUrl = "https://www.stackage.org/"
getStackageResolverPkgList :: StackResolver -> IO (Either String PackageList)
getStackageResolverPkgList (StackResolver sr) = do
request <- parseRequest $ stackageUrl ++ sr
withManager $ do
response <- httpLbs $ request { requestHeaders = (hAccept, "application/json") : requestHeaders request }
when (responseStatus response /= status200) $
void . error $ "getStackageResolverPkgList: status " ++ show (responseStatus response)
pure $ eitherDecode' (responseBody response)