{-# OPTIONS_GHC -Wno-orphans #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE FlexibleInstances #-}
module GHCup.Types.Stack where
import GHCup.Types.JSON.Versions ()
import Control.Applicative
import Control.DeepSeq ( NFData )
import Data.ByteString
import Data.Aeson
import Data.Aeson.Types
import Data.Map.Strict ( Map )
import Data.Text ( Text )
import Data.Text.Encoding
import Data.Versions
import qualified Data.Map as Map
import qualified GHC.Generics as GHC
data SetupInfo = SetupInfo
{ SetupInfo -> Maybe DownloadInfo
siSevenzExe :: Maybe DownloadInfo
, SetupInfo -> Maybe DownloadInfo
siSevenzDll :: Maybe DownloadInfo
, SetupInfo -> Map Text VersionedDownloadInfo
siMsys2 :: Map Text VersionedDownloadInfo
, SetupInfo -> Map Text (Map Version GHCDownloadInfo)
siGHCs :: Map Text (Map Version GHCDownloadInfo)
, SetupInfo -> Map Text (Map Version DownloadInfo)
siStack :: Map Text (Map Version DownloadInfo)
}
deriving (Int -> SetupInfo -> ShowS
[SetupInfo] -> ShowS
SetupInfo -> String
(Int -> SetupInfo -> ShowS)
-> (SetupInfo -> String)
-> ([SetupInfo] -> ShowS)
-> Show SetupInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SetupInfo -> ShowS
showsPrec :: Int -> SetupInfo -> ShowS
$cshow :: SetupInfo -> String
show :: SetupInfo -> String
$cshowList :: [SetupInfo] -> ShowS
showList :: [SetupInfo] -> ShowS
Show, SetupInfo -> SetupInfo -> Bool
(SetupInfo -> SetupInfo -> Bool)
-> (SetupInfo -> SetupInfo -> Bool) -> Eq SetupInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SetupInfo -> SetupInfo -> Bool
== :: SetupInfo -> SetupInfo -> Bool
$c/= :: SetupInfo -> SetupInfo -> Bool
/= :: SetupInfo -> SetupInfo -> Bool
Eq, (forall x. SetupInfo -> Rep SetupInfo x)
-> (forall x. Rep SetupInfo x -> SetupInfo) -> Generic SetupInfo
forall x. Rep SetupInfo x -> SetupInfo
forall x. SetupInfo -> Rep SetupInfo x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. SetupInfo -> Rep SetupInfo x
from :: forall x. SetupInfo -> Rep SetupInfo x
$cto :: forall x. Rep SetupInfo x -> SetupInfo
to :: forall x. Rep SetupInfo x -> SetupInfo
GHC.Generic)
instance NFData SetupInfo
instance FromJSON SetupInfo where
parseJSON :: Value -> Parser SetupInfo
parseJSON = String -> (Object -> Parser SetupInfo) -> Value -> Parser SetupInfo
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"SetupInfo" ((Object -> Parser SetupInfo) -> Value -> Parser SetupInfo)
-> (Object -> Parser SetupInfo) -> Value -> Parser SetupInfo
forall a b. (a -> b) -> a -> b
$ \Object
o -> do
Maybe DownloadInfo
siSevenzExe <- Object
o Object -> Key -> Parser (Maybe DownloadInfo)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"sevenzexe-info"
Maybe DownloadInfo
siSevenzDll <- Object
o Object -> Key -> Parser (Maybe DownloadInfo)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"sevenzdll-info"
Map Text VersionedDownloadInfo
siMsys2 <- Object
o Object -> Key -> Parser (Maybe (Map Text VersionedDownloadInfo))
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"msys2" Parser (Maybe (Map Text VersionedDownloadInfo))
-> Map Text VersionedDownloadInfo
-> Parser (Map Text VersionedDownloadInfo)
forall a. Parser (Maybe a) -> a -> Parser a
.!= Map Text VersionedDownloadInfo
forall a. Monoid a => a
mempty
Map Text (Map Version GHCDownloadInfo)
siGHCs <- Object
o Object -> Key -> Parser (Map Text (Map Version GHCDownloadInfo))
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"ghc"
Map Text (Map Version DownloadInfo)
siStack <- Object
o Object
-> Key -> Parser (Maybe (Map Text (Map Version DownloadInfo)))
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"stack" Parser (Maybe (Map Text (Map Version DownloadInfo)))
-> Map Text (Map Version DownloadInfo)
-> Parser (Map Text (Map Version DownloadInfo))
forall a. Parser (Maybe a) -> a -> Parser a
.!= Map Text (Map Version DownloadInfo)
forall a. Monoid a => a
mempty
SetupInfo -> Parser SetupInfo
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure SetupInfo {Maybe DownloadInfo
Map Text (Map Version GHCDownloadInfo)
Map Text (Map Version DownloadInfo)
Map Text VersionedDownloadInfo
siSevenzExe :: Maybe DownloadInfo
siSevenzDll :: Maybe DownloadInfo
siMsys2 :: Map Text VersionedDownloadInfo
siGHCs :: Map Text (Map Version GHCDownloadInfo)
siStack :: Map Text (Map Version DownloadInfo)
siSevenzExe :: Maybe DownloadInfo
siSevenzDll :: Maybe DownloadInfo
siMsys2 :: Map Text VersionedDownloadInfo
siGHCs :: Map Text (Map Version GHCDownloadInfo)
siStack :: Map Text (Map Version DownloadInfo)
..}
instance ToJSON SetupInfo where
toJSON :: SetupInfo -> Value
toJSON (SetupInfo {Maybe DownloadInfo
Map Text (Map Version GHCDownloadInfo)
Map Text (Map Version DownloadInfo)
Map Text VersionedDownloadInfo
siSevenzExe :: SetupInfo -> Maybe DownloadInfo
siSevenzDll :: SetupInfo -> Maybe DownloadInfo
siMsys2 :: SetupInfo -> Map Text VersionedDownloadInfo
siGHCs :: SetupInfo -> Map Text (Map Version GHCDownloadInfo)
siStack :: SetupInfo -> Map Text (Map Version DownloadInfo)
siSevenzExe :: Maybe DownloadInfo
siSevenzDll :: Maybe DownloadInfo
siMsys2 :: Map Text VersionedDownloadInfo
siGHCs :: Map Text (Map Version GHCDownloadInfo)
siStack :: Map Text (Map Version DownloadInfo)
..}) = [Pair] -> Value
object [ Key
"sevenzexe-info" Key -> Maybe DownloadInfo -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe DownloadInfo
siSevenzExe
, Key
"sevenzdll-info" Key -> Maybe DownloadInfo -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe DownloadInfo
siSevenzDll
, Key
"msys2" Key -> Map Text VersionedDownloadInfo -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Map Text VersionedDownloadInfo
siMsys2
, Key
"ghc" Key -> Map Text (Map Version GHCDownloadInfo) -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Map Text (Map Version GHCDownloadInfo)
siGHCs
, Key
"stack" Key -> Map Text (Map Version DownloadInfo) -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Map Text (Map Version DownloadInfo)
siStack
]
instance Semigroup SetupInfo where
SetupInfo
l <> :: SetupInfo -> SetupInfo -> SetupInfo
<> SetupInfo
r =
SetupInfo
{ siSevenzExe :: Maybe DownloadInfo
siSevenzExe = SetupInfo -> Maybe DownloadInfo
siSevenzExe SetupInfo
l Maybe DownloadInfo -> Maybe DownloadInfo -> Maybe DownloadInfo
forall a. Maybe a -> Maybe a -> Maybe a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> SetupInfo -> Maybe DownloadInfo
siSevenzExe SetupInfo
r
, siSevenzDll :: Maybe DownloadInfo
siSevenzDll = SetupInfo -> Maybe DownloadInfo
siSevenzDll SetupInfo
l Maybe DownloadInfo -> Maybe DownloadInfo -> Maybe DownloadInfo
forall a. Maybe a -> Maybe a -> Maybe a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> SetupInfo -> Maybe DownloadInfo
siSevenzDll SetupInfo
r
, siMsys2 :: Map Text VersionedDownloadInfo
siMsys2 = SetupInfo -> Map Text VersionedDownloadInfo
siMsys2 SetupInfo
l Map Text VersionedDownloadInfo
-> Map Text VersionedDownloadInfo -> Map Text VersionedDownloadInfo
forall a. Semigroup a => a -> a -> a
<> SetupInfo -> Map Text VersionedDownloadInfo
siMsys2 SetupInfo
r
, siGHCs :: Map Text (Map Version GHCDownloadInfo)
siGHCs = (Map Version GHCDownloadInfo
-> Map Version GHCDownloadInfo -> Map Version GHCDownloadInfo)
-> Map Text (Map Version GHCDownloadInfo)
-> Map Text (Map Version GHCDownloadInfo)
-> Map Text (Map Version GHCDownloadInfo)
forall k a. Ord k => (a -> a -> a) -> Map k a -> Map k a -> Map k a
Map.unionWith Map Version GHCDownloadInfo
-> Map Version GHCDownloadInfo -> Map Version GHCDownloadInfo
forall a. Semigroup a => a -> a -> a
(<>) (SetupInfo -> Map Text (Map Version GHCDownloadInfo)
siGHCs SetupInfo
l) (SetupInfo -> Map Text (Map Version GHCDownloadInfo)
siGHCs SetupInfo
r)
, siStack :: Map Text (Map Version DownloadInfo)
siStack = (Map Version DownloadInfo
-> Map Version DownloadInfo -> Map Version DownloadInfo)
-> Map Text (Map Version DownloadInfo)
-> Map Text (Map Version DownloadInfo)
-> Map Text (Map Version DownloadInfo)
forall k a. Ord k => (a -> a -> a) -> Map k a -> Map k a -> Map k a
Map.unionWith Map Version DownloadInfo
-> Map Version DownloadInfo -> Map Version DownloadInfo
forall a. Semigroup a => a -> a -> a
(<>) (SetupInfo -> Map Text (Map Version DownloadInfo)
siStack SetupInfo
l) (SetupInfo -> Map Text (Map Version DownloadInfo)
siStack SetupInfo
r) }
instance Monoid SetupInfo where
mempty :: SetupInfo
mempty =
SetupInfo
{ siSevenzExe :: Maybe DownloadInfo
siSevenzExe = Maybe DownloadInfo
forall a. Maybe a
Nothing
, siSevenzDll :: Maybe DownloadInfo
siSevenzDll = Maybe DownloadInfo
forall a. Maybe a
Nothing
, siMsys2 :: Map Text VersionedDownloadInfo
siMsys2 = Map Text VersionedDownloadInfo
forall k a. Map k a
Map.empty
, siGHCs :: Map Text (Map Version GHCDownloadInfo)
siGHCs = Map Text (Map Version GHCDownloadInfo)
forall k a. Map k a
Map.empty
, siStack :: Map Text (Map Version DownloadInfo)
siStack = Map Text (Map Version DownloadInfo)
forall k a. Map k a
Map.empty
}
mappend :: SetupInfo -> SetupInfo -> SetupInfo
mappend = SetupInfo -> SetupInfo -> SetupInfo
forall a. Semigroup a => a -> a -> a
(<>)
data DownloadInfo = DownloadInfo
{ DownloadInfo -> Text
downloadInfoUrl :: Text
, DownloadInfo -> Maybe Int
downloadInfoContentLength :: Maybe Int
, DownloadInfo -> Maybe ByteString
downloadInfoSha1 :: Maybe ByteString
, DownloadInfo -> Maybe ByteString
downloadInfoSha256 :: Maybe ByteString
}
deriving (Int -> DownloadInfo -> ShowS
[DownloadInfo] -> ShowS
DownloadInfo -> String
(Int -> DownloadInfo -> ShowS)
-> (DownloadInfo -> String)
-> ([DownloadInfo] -> ShowS)
-> Show DownloadInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DownloadInfo -> ShowS
showsPrec :: Int -> DownloadInfo -> ShowS
$cshow :: DownloadInfo -> String
show :: DownloadInfo -> String
$cshowList :: [DownloadInfo] -> ShowS
showList :: [DownloadInfo] -> ShowS
Show, DownloadInfo -> DownloadInfo -> Bool
(DownloadInfo -> DownloadInfo -> Bool)
-> (DownloadInfo -> DownloadInfo -> Bool) -> Eq DownloadInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DownloadInfo -> DownloadInfo -> Bool
== :: DownloadInfo -> DownloadInfo -> Bool
$c/= :: DownloadInfo -> DownloadInfo -> Bool
/= :: DownloadInfo -> DownloadInfo -> Bool
Eq, (forall x. DownloadInfo -> Rep DownloadInfo x)
-> (forall x. Rep DownloadInfo x -> DownloadInfo)
-> Generic DownloadInfo
forall x. Rep DownloadInfo x -> DownloadInfo
forall x. DownloadInfo -> Rep DownloadInfo x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. DownloadInfo -> Rep DownloadInfo x
from :: forall x. DownloadInfo -> Rep DownloadInfo x
$cto :: forall x. Rep DownloadInfo x -> DownloadInfo
to :: forall x. Rep DownloadInfo x -> DownloadInfo
GHC.Generic)
instance ToJSON DownloadInfo where
toJSON :: DownloadInfo -> Value
toJSON (DownloadInfo {Maybe Int
Maybe ByteString
Text
downloadInfoUrl :: DownloadInfo -> Text
downloadInfoContentLength :: DownloadInfo -> Maybe Int
downloadInfoSha1 :: DownloadInfo -> Maybe ByteString
downloadInfoSha256 :: DownloadInfo -> Maybe ByteString
downloadInfoUrl :: Text
downloadInfoContentLength :: Maybe Int
downloadInfoSha1 :: Maybe ByteString
downloadInfoSha256 :: Maybe ByteString
..}) = [Pair] -> Value
object [ Key
"url" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text
downloadInfoUrl
, Key
"content-length" Key -> Maybe Int -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe Int
downloadInfoContentLength
, Key
"sha1" Key -> Maybe Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (ByteString -> Text
decodeUtf8 (ByteString -> Text) -> Maybe ByteString -> Maybe Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ByteString
downloadInfoSha1)
, Key
"sha256" Key -> Maybe Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (ByteString -> Text
decodeUtf8 (ByteString -> Text) -> Maybe ByteString -> Maybe Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ByteString
downloadInfoSha256)
]
instance NFData DownloadInfo
instance FromJSON DownloadInfo where
parseJSON :: Value -> Parser DownloadInfo
parseJSON = String
-> (Object -> Parser DownloadInfo) -> Value -> Parser DownloadInfo
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"DownloadInfo" Object -> Parser DownloadInfo
parseDownloadInfoFromObject
parseDownloadInfoFromObject :: Object -> Parser DownloadInfo
parseDownloadInfoFromObject :: Object -> Parser DownloadInfo
parseDownloadInfoFromObject Object
o = do
Text
url <- Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"url"
Maybe Int
contentLength <- Object
o Object -> Key -> Parser (Maybe Int)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"content-length"
Maybe Text
sha1TextMay <- Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"sha1"
Maybe Text
sha256TextMay <- Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"sha256"
DownloadInfo -> Parser DownloadInfo
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
DownloadInfo
{ downloadInfoUrl :: Text
downloadInfoUrl = Text
url
, downloadInfoContentLength :: Maybe Int
downloadInfoContentLength = Maybe Int
contentLength
, downloadInfoSha1 :: Maybe ByteString
downloadInfoSha1 = (Text -> ByteString) -> Maybe Text -> Maybe ByteString
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Text -> ByteString
encodeUtf8 Maybe Text
sha1TextMay
, downloadInfoSha256 :: Maybe ByteString
downloadInfoSha256 = (Text -> ByteString) -> Maybe Text -> Maybe ByteString
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Text -> ByteString
encodeUtf8 Maybe Text
sha256TextMay
}
data VersionedDownloadInfo = VersionedDownloadInfo
{ VersionedDownloadInfo -> Version
vdiVersion :: Version
, VersionedDownloadInfo -> DownloadInfo
vdiDownloadInfo :: DownloadInfo
}
deriving (Int -> VersionedDownloadInfo -> ShowS
[VersionedDownloadInfo] -> ShowS
VersionedDownloadInfo -> String
(Int -> VersionedDownloadInfo -> ShowS)
-> (VersionedDownloadInfo -> String)
-> ([VersionedDownloadInfo] -> ShowS)
-> Show VersionedDownloadInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> VersionedDownloadInfo -> ShowS
showsPrec :: Int -> VersionedDownloadInfo -> ShowS
$cshow :: VersionedDownloadInfo -> String
show :: VersionedDownloadInfo -> String
$cshowList :: [VersionedDownloadInfo] -> ShowS
showList :: [VersionedDownloadInfo] -> ShowS
Show, VersionedDownloadInfo -> VersionedDownloadInfo -> Bool
(VersionedDownloadInfo -> VersionedDownloadInfo -> Bool)
-> (VersionedDownloadInfo -> VersionedDownloadInfo -> Bool)
-> Eq VersionedDownloadInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: VersionedDownloadInfo -> VersionedDownloadInfo -> Bool
== :: VersionedDownloadInfo -> VersionedDownloadInfo -> Bool
$c/= :: VersionedDownloadInfo -> VersionedDownloadInfo -> Bool
/= :: VersionedDownloadInfo -> VersionedDownloadInfo -> Bool
Eq, (forall x. VersionedDownloadInfo -> Rep VersionedDownloadInfo x)
-> (forall x. Rep VersionedDownloadInfo x -> VersionedDownloadInfo)
-> Generic VersionedDownloadInfo
forall x. Rep VersionedDownloadInfo x -> VersionedDownloadInfo
forall x. VersionedDownloadInfo -> Rep VersionedDownloadInfo x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. VersionedDownloadInfo -> Rep VersionedDownloadInfo x
from :: forall x. VersionedDownloadInfo -> Rep VersionedDownloadInfo x
$cto :: forall x. Rep VersionedDownloadInfo x -> VersionedDownloadInfo
to :: forall x. Rep VersionedDownloadInfo x -> VersionedDownloadInfo
GHC.Generic)
instance ToJSON VersionedDownloadInfo where
toJSON :: VersionedDownloadInfo -> Value
toJSON (VersionedDownloadInfo {vdiDownloadInfo :: VersionedDownloadInfo -> DownloadInfo
vdiDownloadInfo = DownloadInfo{Maybe Int
Maybe ByteString
Text
downloadInfoUrl :: DownloadInfo -> Text
downloadInfoContentLength :: DownloadInfo -> Maybe Int
downloadInfoSha1 :: DownloadInfo -> Maybe ByteString
downloadInfoSha256 :: DownloadInfo -> Maybe ByteString
downloadInfoUrl :: Text
downloadInfoContentLength :: Maybe Int
downloadInfoSha1 :: Maybe ByteString
downloadInfoSha256 :: Maybe ByteString
..}, Version
vdiVersion :: VersionedDownloadInfo -> Version
vdiVersion :: Version
..})
= [Pair] -> Value
object [ Key
"version" Key -> Version -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Version
vdiVersion
, Key
"url" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text
downloadInfoUrl
, Key
"content-length" Key -> Maybe Int -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe Int
downloadInfoContentLength
, Key
"sha1" Key -> Maybe Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (ByteString -> Text
decodeUtf8 (ByteString -> Text) -> Maybe ByteString -> Maybe Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ByteString
downloadInfoSha1)
, Key
"sha256" Key -> Maybe Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (ByteString -> Text
decodeUtf8 (ByteString -> Text) -> Maybe ByteString -> Maybe Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ByteString
downloadInfoSha256)
]
instance NFData VersionedDownloadInfo
instance FromJSON VersionedDownloadInfo where
parseJSON :: Value -> Parser VersionedDownloadInfo
parseJSON = String
-> (Object -> Parser VersionedDownloadInfo)
-> Value
-> Parser VersionedDownloadInfo
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"VersionedDownloadInfo" ((Object -> Parser VersionedDownloadInfo)
-> Value -> Parser VersionedDownloadInfo)
-> (Object -> Parser VersionedDownloadInfo)
-> Value
-> Parser VersionedDownloadInfo
forall a b. (a -> b) -> a -> b
$ \Object
o -> do
Version
ver' <- Object
o Object -> Key -> Parser Version
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"version"
DownloadInfo
downloadInfo <- Object -> Parser DownloadInfo
parseDownloadInfoFromObject Object
o
VersionedDownloadInfo -> Parser VersionedDownloadInfo
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure VersionedDownloadInfo
{ vdiVersion :: Version
vdiVersion = Version
ver'
, vdiDownloadInfo :: DownloadInfo
vdiDownloadInfo = DownloadInfo
downloadInfo
}
data GHCDownloadInfo = GHCDownloadInfo
{ GHCDownloadInfo -> [Text]
gdiConfigureOpts :: [Text]
, GHCDownloadInfo -> Map Text Text
gdiConfigureEnv :: Map Text Text
, GHCDownloadInfo -> DownloadInfo
gdiDownloadInfo :: DownloadInfo
}
deriving (Int -> GHCDownloadInfo -> ShowS
[GHCDownloadInfo] -> ShowS
GHCDownloadInfo -> String
(Int -> GHCDownloadInfo -> ShowS)
-> (GHCDownloadInfo -> String)
-> ([GHCDownloadInfo] -> ShowS)
-> Show GHCDownloadInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GHCDownloadInfo -> ShowS
showsPrec :: Int -> GHCDownloadInfo -> ShowS
$cshow :: GHCDownloadInfo -> String
show :: GHCDownloadInfo -> String
$cshowList :: [GHCDownloadInfo] -> ShowS
showList :: [GHCDownloadInfo] -> ShowS
Show, GHCDownloadInfo -> GHCDownloadInfo -> Bool
(GHCDownloadInfo -> GHCDownloadInfo -> Bool)
-> (GHCDownloadInfo -> GHCDownloadInfo -> Bool)
-> Eq GHCDownloadInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: GHCDownloadInfo -> GHCDownloadInfo -> Bool
== :: GHCDownloadInfo -> GHCDownloadInfo -> Bool
$c/= :: GHCDownloadInfo -> GHCDownloadInfo -> Bool
/= :: GHCDownloadInfo -> GHCDownloadInfo -> Bool
Eq, (forall x. GHCDownloadInfo -> Rep GHCDownloadInfo x)
-> (forall x. Rep GHCDownloadInfo x -> GHCDownloadInfo)
-> Generic GHCDownloadInfo
forall x. Rep GHCDownloadInfo x -> GHCDownloadInfo
forall x. GHCDownloadInfo -> Rep GHCDownloadInfo x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. GHCDownloadInfo -> Rep GHCDownloadInfo x
from :: forall x. GHCDownloadInfo -> Rep GHCDownloadInfo x
$cto :: forall x. Rep GHCDownloadInfo x -> GHCDownloadInfo
to :: forall x. Rep GHCDownloadInfo x -> GHCDownloadInfo
GHC.Generic)
instance NFData GHCDownloadInfo
instance ToJSON GHCDownloadInfo where
toJSON :: GHCDownloadInfo -> Value
toJSON (GHCDownloadInfo {gdiDownloadInfo :: GHCDownloadInfo -> DownloadInfo
gdiDownloadInfo = DownloadInfo {Maybe Int
Maybe ByteString
Text
downloadInfoUrl :: DownloadInfo -> Text
downloadInfoContentLength :: DownloadInfo -> Maybe Int
downloadInfoSha1 :: DownloadInfo -> Maybe ByteString
downloadInfoSha256 :: DownloadInfo -> Maybe ByteString
downloadInfoUrl :: Text
downloadInfoContentLength :: Maybe Int
downloadInfoSha1 :: Maybe ByteString
downloadInfoSha256 :: Maybe ByteString
..}, [Text]
Map Text Text
gdiConfigureOpts :: GHCDownloadInfo -> [Text]
gdiConfigureEnv :: GHCDownloadInfo -> Map Text Text
gdiConfigureOpts :: [Text]
gdiConfigureEnv :: Map Text Text
..})
= [Pair] -> Value
object [ Key
"configure-opts" Key -> [Text] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Text]
gdiConfigureOpts
, Key
"configure-env" Key -> Map Text Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Map Text Text
gdiConfigureEnv
, Key
"url" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text
downloadInfoUrl
, Key
"content-length" Key -> Maybe Int -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe Int
downloadInfoContentLength
, Key
"sha1" Key -> Maybe Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (ByteString -> Text
decodeUtf8 (ByteString -> Text) -> Maybe ByteString -> Maybe Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ByteString
downloadInfoSha1)
, Key
"sha256" Key -> Maybe Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (ByteString -> Text
decodeUtf8 (ByteString -> Text) -> Maybe ByteString -> Maybe Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ByteString
downloadInfoSha256)
]
instance FromJSON GHCDownloadInfo where
parseJSON :: Value -> Parser GHCDownloadInfo
parseJSON = String
-> (Object -> Parser GHCDownloadInfo)
-> Value
-> Parser GHCDownloadInfo
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"GHCDownloadInfo" ((Object -> Parser GHCDownloadInfo)
-> Value -> Parser GHCDownloadInfo)
-> (Object -> Parser GHCDownloadInfo)
-> Value
-> Parser GHCDownloadInfo
forall a b. (a -> b) -> a -> b
$ \Object
o -> do
[Text]
configureOpts <- Object
o Object -> Key -> Parser (Maybe [Text])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"configure-opts" Parser (Maybe [Text]) -> [Text] -> Parser [Text]
forall a. Parser (Maybe a) -> a -> Parser a
.!= [Text]
forall a. Monoid a => a
mempty
Map Text Text
configureEnv <- Object
o Object -> Key -> Parser (Maybe (Map Text Text))
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"configure-env" Parser (Maybe (Map Text Text))
-> Map Text Text -> Parser (Map Text Text)
forall a. Parser (Maybe a) -> a -> Parser a
.!= Map Text Text
forall a. Monoid a => a
mempty
DownloadInfo
downloadInfo <- Object -> Parser DownloadInfo
parseDownloadInfoFromObject Object
o
GHCDownloadInfo -> Parser GHCDownloadInfo
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure GHCDownloadInfo
{ gdiConfigureOpts :: [Text]
gdiConfigureOpts = [Text]
configureOpts
, gdiConfigureEnv :: Map Text Text
gdiConfigureEnv = Map Text Text
configureEnv
, gdiDownloadInfo :: DownloadInfo
gdiDownloadInfo = DownloadInfo
downloadInfo
}