Safe Haskell | None |
---|---|
Language | Haskell2010 |
Hackage-specific wrappers around the Util.JSON module
Synopsis
- data DeserializationError
- validate :: MonadError DeserializationError m => String -> Bool -> m ()
- verifyType :: (ReportSchemaErrors m, MonadError DeserializationError m) => JSValue -> String -> m ()
- class (ReportSchemaErrors m, MonadError DeserializationError m) => MonadKeys m where
- addKeys :: MonadKeys m => KeyEnv -> m a -> m a
- withKeys :: MonadKeys m => KeyEnv -> m a -> m a
- lookupKey :: MonadKeys m => KeyId -> m (Some PublicKey)
- readKeyAsId :: MonadKeys m => JSValue -> m (Some PublicKey)
- data ReadJSON_Keys_Layout a
- data ReadJSON_Keys_NoLayout a
- data ReadJSON_NoKeys_NoLayout a
- runReadJSON_Keys_Layout :: KeyEnv -> RepoLayout -> ReadJSON_Keys_Layout a -> Either DeserializationError a
- runReadJSON_Keys_NoLayout :: KeyEnv -> ReadJSON_Keys_NoLayout a -> Either DeserializationError a
- runReadJSON_NoKeys_NoLayout :: ReadJSON_NoKeys_NoLayout a -> Either DeserializationError a
- parseJSON_Keys_Layout :: FromJSON ReadJSON_Keys_Layout a => KeyEnv -> RepoLayout -> ByteString -> Either DeserializationError a
- parseJSON_Keys_NoLayout :: FromJSON ReadJSON_Keys_NoLayout a => KeyEnv -> ByteString -> Either DeserializationError a
- parseJSON_NoKeys_NoLayout :: FromJSON ReadJSON_NoKeys_NoLayout a => ByteString -> Either DeserializationError a
- readJSON_Keys_Layout :: (FsRoot root, FromJSON ReadJSON_Keys_Layout a) => KeyEnv -> RepoLayout -> Path root -> IO (Either DeserializationError a)
- readJSON_Keys_NoLayout :: (FsRoot root, FromJSON ReadJSON_Keys_NoLayout a) => KeyEnv -> Path root -> IO (Either DeserializationError a)
- readJSON_NoKeys_NoLayout :: (FsRoot root, FromJSON ReadJSON_NoKeys_NoLayout a) => Path root -> IO (Either DeserializationError a)
- data WriteJSON a
- runWriteJSON :: RepoLayout -> WriteJSON a -> a
- renderJSON :: ToJSON WriteJSON a => RepoLayout -> a -> ByteString
- renderJSON_NoLayout :: ToJSON Identity a => a -> ByteString
- writeJSON :: ToJSON WriteJSON a => RepoLayout -> Path Absolute -> a -> IO ()
- writeJSON_NoLayout :: ToJSON Identity a => Path Absolute -> a -> IO ()
- writeKeyAsId :: Some PublicKey -> JSValue
- class ToJSON m a where
- class FromJSON m a where
- class ToObjectKey m a where
- toObjectKey :: a -> m String
- class FromObjectKey m a where
- fromObjectKey :: String -> m (Maybe a)
- class (Applicative m, Monad m) => ReportSchemaErrors m where
- type Expected = String
- type Got = String
- expected' :: ReportSchemaErrors m => Expected -> JSValue -> m a
- fromJSObject :: ReportSchemaErrors m => JSValue -> m [(String, JSValue)]
- fromJSField :: (ReportSchemaErrors m, FromJSON m a) => JSValue -> String -> m a
- fromJSOptField :: (ReportSchemaErrors m, FromJSON m a) => JSValue -> String -> m (Maybe a)
- mkObject :: forall m. Monad m => [(String, m JSValue)] -> m JSValue
- data JSValue
- data Int54
Deserialization errors
data DeserializationError #
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. |
Instances
Show DeserializationError # | |
Defined in Hackage.Security.JSON showsPrec :: Int -> DeserializationError -> ShowS # show :: DeserializationError -> String # showList :: [DeserializationError] -> ShowS # | |
Exception DeserializationError # | |
Pretty DeserializationError # | |
Defined in Hackage.Security.JSON pretty :: DeserializationError -> String # | |
MonadError DeserializationError ReadJSON_NoKeys_NoLayout # | |
Defined in Hackage.Security.JSON | |
MonadError DeserializationError ReadJSON_Keys_NoLayout # | |
Defined in Hackage.Security.JSON | |
MonadError DeserializationError ReadJSON_Keys_Layout # | |
Defined in Hackage.Security.JSON throwError :: DeserializationError -> ReadJSON_Keys_Layout a # catchError :: ReadJSON_Keys_Layout a -> (DeserializationError -> ReadJSON_Keys_Layout a) -> ReadJSON_Keys_Layout a # |
validate :: MonadError DeserializationError m => String -> Bool -> m () #
verifyType :: (ReportSchemaErrors m, MonadError DeserializationError m) => JSValue -> String -> m () #
MonadKeys
class (ReportSchemaErrors m, MonadError DeserializationError m) => MonadKeys m where #
MonadReader-like monad, specialized to key environments
Instances
MonadKeys ReadJSON_Keys_NoLayout # | |
Defined in Hackage.Security.JSON localKeys :: (KeyEnv -> KeyEnv) -> ReadJSON_Keys_NoLayout a -> ReadJSON_Keys_NoLayout a # | |
MonadKeys ReadJSON_Keys_Layout # | |
Defined in Hackage.Security.JSON localKeys :: (KeyEnv -> KeyEnv) -> ReadJSON_Keys_Layout a -> ReadJSON_Keys_Layout a # |
Reader monads
data ReadJSON_Keys_Layout a #
Instances
data ReadJSON_Keys_NoLayout a #
Instances
data ReadJSON_NoKeys_NoLayout a #
Instances
runReadJSON_Keys_Layout :: KeyEnv -> RepoLayout -> ReadJSON_Keys_Layout a -> Either DeserializationError a #
Utility
parseJSON_Keys_Layout :: FromJSON ReadJSON_Keys_Layout a => KeyEnv -> RepoLayout -> ByteString -> Either DeserializationError a #
parseJSON_Keys_NoLayout :: FromJSON ReadJSON_Keys_NoLayout a => KeyEnv -> ByteString -> Either DeserializationError a #
parseJSON_NoKeys_NoLayout :: FromJSON ReadJSON_NoKeys_NoLayout a => ByteString -> Either DeserializationError a #
readJSON_Keys_Layout :: (FsRoot root, FromJSON ReadJSON_Keys_Layout a) => KeyEnv -> RepoLayout -> Path root -> IO (Either DeserializationError a) #
readJSON_Keys_NoLayout :: (FsRoot root, FromJSON ReadJSON_Keys_NoLayout a) => KeyEnv -> Path root -> IO (Either DeserializationError a) #
readJSON_NoKeys_NoLayout :: (FsRoot root, FromJSON ReadJSON_NoKeys_NoLayout a) => Path root -> IO (Either DeserializationError a) #
Writing
Instances
Monad WriteJSON # | |
Functor WriteJSON # | |
Applicative WriteJSON # | |
MonadReader RepoLayout WriteJSON # | |
Defined in Hackage.Security.JSON ask :: WriteJSON RepoLayout # local :: (RepoLayout -> RepoLayout) -> WriteJSON a -> WriteJSON a # reader :: (RepoLayout -> a) -> WriteJSON a # |
runWriteJSON :: RepoLayout -> WriteJSON a -> a #
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
writeKeyAsId :: Some PublicKey -> JSValue #
Re-exports
Type classes
Instances
Instances
class ToObjectKey m a where #
toObjectKey :: a -> m String #
Instances
Monad m => ToObjectKey m String # | |
Defined in Hackage.Security.Util.JSON toObjectKey :: String -> m String # | |
Monad m => ToObjectKey m KeyId # | |
Defined in Hackage.Security.Key toObjectKey :: KeyId -> m String # | |
Monad m => ToObjectKey m HashFn # | |
Defined in Hackage.Security.TUF.FileInfo toObjectKey :: HashFn -> m String # | |
Monad m => ToObjectKey m TargetPath # | |
Defined in Hackage.Security.TUF.FileMap toObjectKey :: TargetPath -> m String # | |
Monad m => ToObjectKey m (Path root) # | |
Defined in Hackage.Security.Util.JSON toObjectKey :: Path root -> m String # |
class FromObjectKey m a where #
fromObjectKey :: String -> m (Maybe a) #
Instances
Monad m => FromObjectKey m String # | |
Defined in Hackage.Security.Util.JSON fromObjectKey :: String -> m (Maybe String) # | |
Monad m => FromObjectKey m KeyId # | |
Defined in Hackage.Security.Key fromObjectKey :: String -> m (Maybe KeyId) # | |
ReportSchemaErrors m => FromObjectKey m HashFn # | |
Defined in Hackage.Security.TUF.FileInfo fromObjectKey :: String -> m (Maybe HashFn) # | |
ReportSchemaErrors m => FromObjectKey m TargetPath # | |
Defined in Hackage.Security.TUF.FileMap fromObjectKey :: String -> m (Maybe TargetPath) # | |
Monad m => FromObjectKey m (Path root) # | |
Defined in Hackage.Security.Util.JSON fromObjectKey :: String -> m (Maybe (Path root)) # |
class (Applicative m, Monad m) => ReportSchemaErrors m where #
Monads in which we can report schema errors
Instances
expected' :: ReportSchemaErrors m => Expected -> JSValue -> m a #
Utility
fromJSObject :: ReportSchemaErrors m => JSValue -> m [(String, JSValue)] #
fromJSField :: (ReportSchemaErrors m, FromJSON m a) => JSValue -> String -> m a #
Extract a field from a JSON object
fromJSOptField :: (ReportSchemaErrors m, FromJSON m a) => JSValue -> String -> m (Maybe a) #
Re-exports
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.