hackage-security-0.5.2.2: Hackage security library

Safe HaskellNone
LanguageHaskell2010

Hackage.Security.JSON

Contents

Description

Hackage-specific wrappers around the Util.JSON module

Synopsis

Deserialization errors

data DeserializationError #

Constructors

DeserializationErrorMalformed String

Malformed JSON has syntax errors in the JSON itself (i.e., we cannot even parse it to a JSValue)

DeserializationErrorSchema String

Invalid JSON has valid syntax but invalid structure

The string gives a hint about what we expected instead

DeserializationErrorUnknownKey KeyId

The JSON file contains a key ID of an unknown key

DeserializationErrorValidation String

Some verification step failed

DeserializationErrorFileType String String

Wrong file type

Records actual and expected types.

MonadKeys

addKeys :: MonadKeys m => KeyEnv -> m a -> m a #

withKeys :: MonadKeys m => KeyEnv -> m a -> m a #

Reader monads

data ReadJSON_Keys_Layout a #

Instances

Monad ReadJSON_Keys_Layout # 
Functor ReadJSON_Keys_Layout # 
Applicative ReadJSON_Keys_Layout # 
ReportSchemaErrors ReadJSON_Keys_Layout # 
MonadKeys ReadJSON_Keys_Layout # 
MonadError DeserializationError ReadJSON_Keys_Layout # 
MonadReader RepoLayout ReadJSON_Keys_Layout # 

Utility

Writing

data WriteJSON a #

Instances

Utility

renderJSON :: ToJSON WriteJSON a => RepoLayout -> a -> ByteString #

Render to canonical JSON format

renderJSON_NoLayout :: ToJSON Identity a => a -> ByteString #

Variation on renderJSON for files that don't require the repo layout

Re-exports

Type classes

class ToJSON m a where #

Minimal complete definition

toJSON

Methods

toJSON :: a -> m JSValue #

Instances

Monad m => ToJSON m URI # 

Methods

toJSON :: URI -> m JSValue #

Monad m => ToJSON m UTCTime # 

Methods

toJSON :: UTCTime -> m JSValue #

Monad m => ToJSON m Int54 # 

Methods

toJSON :: Int54 -> m JSValue #

Monad m => ToJSON m String # 

Methods

toJSON :: String -> m JSValue #

Monad m => ToJSON m JSValue # 

Methods

toJSON :: JSValue -> m JSValue #

Monad m => ToJSON m KeyEnv # 

Methods

toJSON :: KeyEnv -> m JSValue #

Monad m => ToJSON m Hash # 

Methods

toJSON :: Hash -> m JSValue #

Monad m => ToJSON m FileLength # 

Methods

toJSON :: FileLength -> m JSValue #

Monad m => ToJSON m KeyThreshold # 

Methods

toJSON :: KeyThreshold -> m JSValue #

Monad m => ToJSON m FileInfo # 

Methods

toJSON :: FileInfo -> m JSValue #

Monad m => ToJSON m FileMap # 

Methods

toJSON :: FileMap -> m JSValue #

Monad m => ToJSON m FileExpires # 

Methods

toJSON :: FileExpires -> m JSValue #

Monad m => ToJSON m FileVersion # 

Methods

toJSON :: FileVersion -> m JSValue #

Monad m => ToJSON m PreSignature # 

Methods

toJSON :: PreSignature -> m JSValue #

Monad m => ToJSON m Signatures # 

Methods

toJSON :: Signatures -> m JSValue #

Monad m => ToJSON m Mirrors # 

Methods

toJSON :: Mirrors -> m JSValue #

Monad m => ToJSON m Mirror # 

Methods

toJSON :: Mirror -> m JSValue #

MonadReader RepoLayout m => ToJSON m Snapshot # 

Methods

toJSON :: Snapshot -> m JSValue #

Monad m => ToJSON m Targets # 

Methods

toJSON :: Targets -> m JSValue #

Monad m => ToJSON m Delegations # 

Methods

toJSON :: Delegations -> m JSValue #

Monad m => ToJSON m DelegationSpec # 
MonadReader RepoLayout m => ToJSON m Timestamp # 

Methods

toJSON :: Timestamp -> m JSValue #

Monad m => ToJSON m Root # 

Methods

toJSON :: Root -> m JSValue #

Monad m => ToJSON m RootRoles # 

Methods

toJSON :: RootRoles -> m JSValue #

(Monad m, ToJSON m a) => ToJSON m [a] # 

Methods

toJSON :: [a] -> m JSValue #

Monad m => ToJSON m (KeyType typ) # 

Methods

toJSON :: KeyType typ -> m JSValue #

Monad m => ToJSON m (Some KeyType) # 

Methods

toJSON :: Some KeyType -> m JSValue #

Monad m => ToJSON m (Some PublicKey) # 

Methods

toJSON :: Some PublicKey -> m JSValue #

Monad m => ToJSON m (Some Key) # 

Methods

toJSON :: Some Key -> m JSValue #

Monad m => ToJSON m (PublicKey typ) # 

Methods

toJSON :: PublicKey typ -> m JSValue #

Monad m => ToJSON m (Key typ) # 

Methods

toJSON :: Key typ -> m JSValue #

(Monad m, ToJSON m a) => ToJSON m (UninterpretedSignatures a) # 
(Monad m, ToJSON m a) => ToJSON m (Signed a) # 

Methods

toJSON :: Signed a -> m JSValue #

Monad m => ToJSON m (RoleSpec a) # 

Methods

toJSON :: RoleSpec a -> m JSValue #

(Monad m, ToObjectKey m k, ToJSON m a) => ToJSON m (Map k a) # 

Methods

toJSON :: Map k a -> m JSValue #

class FromJSON m a where #

Minimal complete definition

fromJSON

Methods

fromJSON :: JSValue -> m a #

Instances

ReportSchemaErrors m => FromJSON m URI # 

Methods

fromJSON :: JSValue -> m URI #

ReportSchemaErrors m => FromJSON m UTCTime # 

Methods

fromJSON :: JSValue -> m UTCTime #

ReportSchemaErrors m => FromJSON m Int54 # 

Methods

fromJSON :: JSValue -> m Int54 #

ReportSchemaErrors m => FromJSON m String # 

Methods

fromJSON :: JSValue -> m String #

Monad m => FromJSON m JSValue # 

Methods

fromJSON :: JSValue -> m JSValue #

ReportSchemaErrors m => FromJSON m KeyEnv # 

Methods

fromJSON :: JSValue -> m KeyEnv #

ReportSchemaErrors m => FromJSON m Hash # 

Methods

fromJSON :: JSValue -> m Hash #

ReportSchemaErrors m => FromJSON m FileLength # 

Methods

fromJSON :: JSValue -> m FileLength #

ReportSchemaErrors m => FromJSON m KeyThreshold # 
ReportSchemaErrors m => FromJSON m FileInfo # 

Methods

fromJSON :: JSValue -> m FileInfo #

ReportSchemaErrors m => FromJSON m FileMap # 

Methods

fromJSON :: JSValue -> m FileMap #

ReportSchemaErrors m => FromJSON m Header # 

Methods

fromJSON :: JSValue -> m Header #

ReportSchemaErrors m => FromJSON m FileExpires # 

Methods

fromJSON :: JSValue -> m FileExpires #

ReportSchemaErrors m => FromJSON m FileVersion # 

Methods

fromJSON :: JSValue -> m FileVersion #

ReportSchemaErrors m => FromJSON m PreSignature # 
MonadKeys m => FromJSON m Signatures # 

Methods

fromJSON :: JSValue -> m Signatures #

(MonadError DeserializationError m, ReportSchemaErrors m) => FromJSON m Mirrors # 

Methods

fromJSON :: JSValue -> m Mirrors #

ReportSchemaErrors m => FromJSON m Mirror # 

Methods

fromJSON :: JSValue -> m Mirror #

(MonadReader RepoLayout m, MonadError DeserializationError m, ReportSchemaErrors m) => FromJSON m Snapshot # 

Methods

fromJSON :: JSValue -> m Snapshot #

MonadKeys m => FromJSON m Targets # 

Methods

fromJSON :: JSValue -> m Targets #

MonadKeys m => FromJSON m Delegations # 

Methods

fromJSON :: JSValue -> m Delegations #

MonadKeys m => FromJSON m DelegationSpec # 
(MonadReader RepoLayout m, MonadError DeserializationError m, ReportSchemaErrors m) => FromJSON m Timestamp # 

Methods

fromJSON :: JSValue -> m Timestamp #

MonadKeys m => FromJSON m RootRoles # 

Methods

fromJSON :: JSValue -> m RootRoles #

(ReportSchemaErrors m, FromJSON m a) => FromJSON m [a] # 

Methods

fromJSON :: JSValue -> m [a] #

ReportSchemaErrors m => FromJSON m (Some KeyType) # 

Methods

fromJSON :: JSValue -> m (Some KeyType) #

ReportSchemaErrors m => FromJSON m (Some PublicKey) # 

Methods

fromJSON :: JSValue -> m (Some PublicKey) #

ReportSchemaErrors m => FromJSON m (Some Key) # 

Methods

fromJSON :: JSValue -> m (Some Key) #

(ReportSchemaErrors m, FromJSON m a) => FromJSON m (UninterpretedSignatures a) # 
MonadKeys m => FromJSON m (Signed Mirrors) # 

Methods

fromJSON :: JSValue -> m (Signed Mirrors) #

(MonadKeys m, MonadReader RepoLayout m) => FromJSON m (Signed Snapshot) # 

Methods

fromJSON :: JSValue -> m (Signed Snapshot) #

MonadKeys m => FromJSON m (Signed Targets) # 

Methods

fromJSON :: JSValue -> m (Signed Targets) #

(MonadKeys m, MonadReader RepoLayout m) => FromJSON m (Signed Timestamp) # 

Methods

fromJSON :: JSValue -> m (Signed Timestamp) #

MonadKeys m => FromJSON m (RoleSpec a) # 

Methods

fromJSON :: JSValue -> m (RoleSpec a) #

MonadKeys m => FromJSON m (Signed Root) #

We give an instance for Signed Root rather than Root because the key environment from the root data is necessary to resolve the explicit sharing in the signatures.

Methods

fromJSON :: JSValue -> m (Signed Root) #

(ReportSchemaErrors m, Ord k, FromObjectKey m k, FromJSON m a) => FromJSON m (Map k a) # 

Methods

fromJSON :: JSValue -> m (Map k a) #

class ToObjectKey m a where #

Used in the ToJSON instance for Map

Minimal complete definition

toObjectKey

Methods

toObjectKey :: a -> m String #

Instances

Monad m => ToObjectKey m String # 

Methods

toObjectKey :: String -> m String #

Monad m => ToObjectKey m KeyId # 

Methods

toObjectKey :: KeyId -> m String #

Monad m => ToObjectKey m HashFn # 

Methods

toObjectKey :: HashFn -> m String #

Monad m => ToObjectKey m TargetPath # 
Monad m => ToObjectKey m (Path root) # 

Methods

toObjectKey :: Path root -> m String #

class FromObjectKey m a where #

Used in the FromJSON instance for Map

Minimal complete definition

fromObjectKey

Methods

fromObjectKey :: String -> m (Maybe a) #

type Got = String #

Utility

fromJSField :: (ReportSchemaErrors m, FromJSON m a) => JSValue -> String -> m a #

Extract a field from a JSON object

mkObject :: forall m. Monad m => [(String, m JSValue)] -> m JSValue #

Re-exports

data Int54 #

54-bit integer values

JavaScript can only safely represent numbers between -(2^53 - 1) and 2^53 - 1.

TODO: Although we introduce the type here, we don't actually do any bounds checking and just inherit all type class instance from Int64. We should probably define fromInteger to do bounds checking, give different instances for type classes such as Bounded and FiniteBits, etc.

Instances

Bounded Int54 # 
Enum Int54 # 
Eq Int54 # 

Methods

(==) :: Int54 -> Int54 -> Bool #

(/=) :: Int54 -> Int54 -> Bool #

Integral Int54 # 
Data Int54 # 

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Int54 -> c Int54 #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Int54 #

toConstr :: Int54 -> Constr #

dataTypeOf :: Int54 -> DataType #

dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c Int54) #

dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Int54) #

gmapT :: (forall b. Data b => b -> b) -> Int54 -> Int54 #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Int54 -> r #

gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Int54 -> r #

gmapQ :: (forall d. Data d => d -> u) -> Int54 -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Int54 -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Int54 -> m Int54 #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Int54 -> m Int54 #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Int54 -> m Int54 #

Num Int54 # 
Ord Int54 # 

Methods

compare :: Int54 -> Int54 -> Ordering #

(<) :: Int54 -> Int54 -> Bool #

(<=) :: Int54 -> Int54 -> Bool #

(>) :: Int54 -> Int54 -> Bool #

(>=) :: Int54 -> Int54 -> Bool #

max :: Int54 -> Int54 -> Int54 #

min :: Int54 -> Int54 -> Int54 #

Read Int54 # 
Real Int54 # 

Methods

toRational :: Int54 -> Rational #

Show Int54 # 

Methods

showsPrec :: Int -> Int54 -> ShowS #

show :: Int54 -> String #

showList :: [Int54] -> ShowS #

Ix Int54 # 
PrintfArg Int54 # 
Storable Int54 # 

Methods

sizeOf :: Int54 -> Int #

alignment :: Int54 -> Int #

peekElemOff :: Ptr Int54 -> Int -> IO Int54 #

pokeElemOff :: Ptr Int54 -> Int -> Int54 -> IO () #

peekByteOff :: Ptr b -> Int -> IO Int54 #

pokeByteOff :: Ptr b -> Int -> Int54 -> IO () #

peek :: Ptr Int54 -> IO Int54 #

poke :: Ptr Int54 -> Int54 -> IO () #

Bits Int54 # 
FiniteBits Int54 # 
ReportSchemaErrors m => FromJSON m Int54 # 

Methods

fromJSON :: JSValue -> m Int54 #

Monad m => ToJSON m Int54 # 

Methods

toJSON :: Int54 -> m JSValue #