{-# 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 = forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either (forall a e. Exception e => e -> a
throw forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> InvalidMetaFile
InvalidMetaFile) forall a. a -> a
id forall b c a. (b -> c) -> (a -> b) -> a -> c
. 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
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. 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
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. 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
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. 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