{-# LANGUAGE DeriveGeneric #-}
module Distribution.Hackage.DB.MetaData where
import Distribution.Hackage.DB.Errors
import Control.Exception
import Data.Aeson
import Data.ByteString.Lazy.UTF8 as BS
import Data.Map as Map
import GHC.Generics ( Generic )
parseMetaData :: ByteString -> MetaData
parseMetaData :: ByteString -> MetaData
parseMetaData = (String -> MetaData)
-> (MetaData -> MetaData) -> Either String MetaData -> MetaData
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either (InvalidMetaFile -> MetaData
forall a e. Exception e => e -> a
throw (InvalidMetaFile -> MetaData)
-> (String -> InvalidMetaFile) -> String -> MetaData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> InvalidMetaFile
InvalidMetaFile) MetaData -> MetaData
forall a. a -> a
id (Either String MetaData -> MetaData)
-> (ByteString -> Either String MetaData) -> ByteString -> MetaData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Either String MetaData
forall a. FromJSON a => ByteString -> Either String a
eitherDecode
data MetaData = MetaData { MetaData -> SignedMetaData
signed :: SignedMetaData
, MetaData -> [String]
signatures :: [String]
}
deriving (Int -> MetaData -> ShowS
[MetaData] -> ShowS
MetaData -> String
(Int -> MetaData -> ShowS)
-> (MetaData -> String) -> ([MetaData] -> ShowS) -> Show MetaData
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MetaData] -> ShowS
$cshowList :: [MetaData] -> ShowS
show :: MetaData -> String
$cshow :: MetaData -> String
showsPrec :: Int -> MetaData -> ShowS
$cshowsPrec :: Int -> MetaData -> ShowS
Show, (forall x. MetaData -> Rep MetaData x)
-> (forall x. Rep MetaData x -> MetaData) -> Generic MetaData
forall x. Rep MetaData x -> MetaData
forall x. MetaData -> Rep MetaData x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep MetaData x -> MetaData
$cfrom :: forall x. MetaData -> Rep MetaData x
Generic)
instance FromJSON MetaData
data SignedMetaData = SignedMetaData { SignedMetaData -> Int
version :: Int
, SignedMetaData -> Maybe String
expires :: Maybe String
, SignedMetaData -> String
_type :: String
, SignedMetaData -> Map String TargetData
targets :: Map String TargetData
}
deriving (Int -> SignedMetaData -> ShowS
[SignedMetaData] -> ShowS
SignedMetaData -> String
(Int -> SignedMetaData -> ShowS)
-> (SignedMetaData -> String)
-> ([SignedMetaData] -> ShowS)
-> Show SignedMetaData
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SignedMetaData] -> ShowS
$cshowList :: [SignedMetaData] -> ShowS
show :: SignedMetaData -> String
$cshow :: SignedMetaData -> String
showsPrec :: Int -> SignedMetaData -> ShowS
$cshowsPrec :: Int -> SignedMetaData -> ShowS
Show, (forall x. SignedMetaData -> Rep SignedMetaData x)
-> (forall x. Rep SignedMetaData x -> SignedMetaData)
-> Generic SignedMetaData
forall x. Rep SignedMetaData x -> SignedMetaData
forall x. SignedMetaData -> Rep SignedMetaData x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SignedMetaData x -> SignedMetaData
$cfrom :: forall x. SignedMetaData -> Rep SignedMetaData x
Generic)
instance FromJSON SignedMetaData
data TargetData = TargetData { TargetData -> Int
length :: Int
, TargetData -> Map String String
hashes :: Map String String
}
deriving (Int -> TargetData -> ShowS
[TargetData] -> ShowS
TargetData -> String
(Int -> TargetData -> ShowS)
-> (TargetData -> String)
-> ([TargetData] -> ShowS)
-> Show TargetData
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TargetData] -> ShowS
$cshowList :: [TargetData] -> ShowS
show :: TargetData -> String
$cshow :: TargetData -> String
showsPrec :: Int -> TargetData -> ShowS
$cshowsPrec :: Int -> TargetData -> ShowS
Show, (forall x. TargetData -> Rep TargetData x)
-> (forall x. Rep TargetData x -> TargetData) -> Generic TargetData
forall x. Rep TargetData x -> TargetData
forall x. TargetData -> Rep TargetData x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep TargetData x -> TargetData
$cfrom :: forall x. TargetData -> Rep TargetData x
Generic)
instance FromJSON TargetData