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 Source

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

class (ReportSchemaErrors m, MonadError DeserializationError m) => MonadKeys m where Source

MonadReader-like monad, specialized to key environments

Methods

localKeys :: (KeyEnv -> KeyEnv) -> m a -> m a Source

askKeys :: m KeyEnv Source

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

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

Reader monads

Utility

Writing

Utility

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

Render to canonical JSON format

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

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

Re-exports

Type classes

class ToJSON m a where Source

Methods

toJSON :: a -> m JSValue Source

class FromJSON m a where Source

Methods

fromJSON :: JSValue -> m a Source

Instances

ReportSchemaErrors m => FromJSON m URI Source 
ReportSchemaErrors m => FromJSON m UTCTime Source 
ReportSchemaErrors m => FromJSON m Int54 Source 
ReportSchemaErrors m => FromJSON m String Source 
Monad m => FromJSON m JSValue Source 
ReportSchemaErrors m => FromJSON m KeyEnv Source 
ReportSchemaErrors m => FromJSON m Hash Source 
ReportSchemaErrors m => FromJSON m FileLength Source 
ReportSchemaErrors m => FromJSON m KeyThreshold Source 
ReportSchemaErrors m => FromJSON m FileInfo Source 
ReportSchemaErrors m => FromJSON m FileMap Source 
ReportSchemaErrors m => FromJSON m Header Source 
ReportSchemaErrors m => FromJSON m FileExpires Source 
ReportSchemaErrors m => FromJSON m FileVersion Source 
ReportSchemaErrors m => FromJSON m PreSignature Source 
MonadKeys m => FromJSON m Signatures Source 
(MonadError DeserializationError m, ReportSchemaErrors m) => FromJSON m Mirrors Source 
ReportSchemaErrors m => FromJSON m Mirror Source 
(MonadReader RepoLayout m, MonadError DeserializationError m, ReportSchemaErrors m) => FromJSON m Snapshot Source 
(MonadReader RepoLayout m, MonadError DeserializationError m, ReportSchemaErrors m) => FromJSON m Timestamp Source 
MonadKeys m => FromJSON m Targets Source 
MonadKeys m => FromJSON m Delegations Source 
MonadKeys m => FromJSON m DelegationSpec Source 
MonadKeys m => FromJSON m RootRoles Source 
(ReportSchemaErrors m, FromJSON m a) => FromJSON m [a] Source 
ReportSchemaErrors m => FromJSON m (Some KeyType) Source 
ReportSchemaErrors m => FromJSON m (Some PublicKey) Source 
ReportSchemaErrors m => FromJSON m (Some Key) Source 
(ReportSchemaErrors m, FromJSON m a) => FromJSON m (UninterpretedSignatures a) Source 
MonadKeys m => FromJSON m (Signed Mirrors) Source 
(MonadKeys m, MonadReader RepoLayout m) => FromJSON m (Signed Snapshot) Source 
(MonadKeys m, MonadReader RepoLayout m) => FromJSON m (Signed Timestamp) Source 
MonadKeys m => FromJSON m (Signed Targets) Source 
MonadKeys m => FromJSON m (RoleSpec a) Source 
MonadKeys m => FromJSON m (Signed Root) Source

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.

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

class ToObjectKey m a where Source

Used in the ToJSON instance for Map

Methods

toObjectKey :: a -> m String Source

Utility

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

Extract a field from a JSON object

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

Re-exports

data Int54 Source

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.