ganeti

Safe HaskellSafe-Infered

Ganeti.JSON

Contents

Description

JSON utility functions.

Synopsis

JSON-related functions

type JSField = (String, JSValue)Source

type JSRecord = [JSField]Source

A type alias for the list-based representation of J.JSObject.

fromJResult :: Monad m => String -> Result a -> m aSource

Converts a JSON Result into a monadic value.

fromJResultE :: (Error e, MonadError e m) => String -> Result a -> m aSource

Converts a JSON Result into a MonadError value.

readEitherString :: Monad m => JSValue -> m StringSource

Tries to read a string from a JSON value.

In case the value was not a string, we fail the read (in the context of the current monad.

loadJSArraySource

Arguments

:: Monad m 
=> String

Operation description (for error reporting)

-> String

Input message

-> m [JSObject JSValue] 

Converts a JSON message into an array of JSON objects.

buildNoKeyError :: JSRecord -> String -> StringSource

fromObj :: (JSON a, Monad m) => JSRecord -> String -> m aSource

Reads the value of a key in a JSON object.

maybeFromObj :: (JSON a, Monad m) => JSRecord -> String -> m (Maybe a)Source

Reads the value of an optional key in a JSON object. Missing keys, or keys that have a 'null' value, will be returned as Nothing, otherwise we attempt deserialisation and return a Just value.

fromObjWithDefault :: (JSON a, Monad m) => JSRecord -> String -> a -> m aSource

Reads the value of a key in a JSON object with a default if missing. Note that both missing keys and keys with value 'null' will cause the default value to be returned.

arrayMaybeFromJVal :: (JSON a, Monad m) => JSValue -> m [Maybe a]Source

arrayMaybeFromObj :: (JSON a, Monad m) => JSRecord -> String -> m [Maybe a]Source

tryArrayMaybeFromObjSource

Arguments

:: JSON a 
=> String

Textual owner in error messages

-> JSRecord

The object array

-> String

The desired key from the object

-> Result [Maybe a] 

Wrapper for arrayMaybeFromObj with better diagnostic

fromKeyValueSource

Arguments

:: (JSON a, Monad m) 
=> String

The key name

-> JSValue

The value to read

-> m a 

Reads a JValue, that originated from an object key.

fromJVal :: (Monad m, JSON a) => JSValue -> m aSource

Small wrapper over readJSON.

fromJValE :: (Error e, MonadError e m, JSON a) => JSValue -> m aSource

Small wrapper over readJSON for MonadError.

jsonHead :: JSON b => [a] -> (a -> b) -> JSValueSource

Helper function that returns Null or first element of the list.

getMaybeJsonHead :: JSON b => [a] -> (a -> Maybe b) -> JSValueSource

Helper for extracting Maybe values from a possibly empty list.

getMaybeJsonElem :: JSON b => [a] -> Int -> (a -> Maybe b) -> JSValueSource

Helper for extracting Maybe values from a list that might be too short.

asJSObject :: Monad m => JSValue -> m (JSObject JSValue)Source

Converts a JSON value into a JSON object.

asObjectList :: Monad m => [JSValue] -> m [JSObject JSValue]Source

Coneverts a list of JSON values into a list of JSON objects.

tryFromObjSource

Arguments

:: JSON a 
=> String

Textual owner in error messages

-> JSRecord

The object array

-> String

The desired key from the object

-> Result a 

Try to extract a key from an object with better error reporting than fromObj.

toArray :: Monad m => JSValue -> m [JSValue]Source

Ensure a given JSValue is actually a JSArray.

optionalJSField :: JSON a => String -> Maybe a -> Maybe JSFieldSource

Creates a Maybe JSField. If the value string is Nothing, the JSField will be Nothing as well.

optFieldsToObj :: [Maybe JSField] -> JSValueSource

Creates an object with all the non-Nothing fields of the given list.

Container type (special type for JSON serialisation)

class HasStringRepr a whereSource

Class of types that can be converted from Strings. This is similar to the Read class, but it's using a different serialisation format, so we have to define a separate class. Mostly useful for custom key types in JSON dictionaries, which have to be backed by strings.

Methods

fromStringRepr :: Monad m => String -> m aSource

toStringRepr :: a -> StringSource

Instances

newtype GenericContainer a b Source

The container type, a wrapper over Data.Map

Constructors

GenericContainer 

Fields

fromContainer :: Map a b
 

Instances

Arbitrary OsParams 
Arbitrary IAllocatorParams 
Arbitrary ClusterNicParams 
Arbitrary ClusterOsParams 
Arbitrary ClusterBeParams 
Arbitrary OsHvParams

No real arbitrary instance for OsHvParams yet.

Arbitrary ClusterHvParams

No real arbitrary instance for ClusterHvParams yet.

(Eq a, Eq b) => Eq (GenericContainer a b) 
(Show a, Show b) => Show (GenericContainer a b) 
(NFData a, NFData b) => NFData (GenericContainer a b) 
(HasStringRepr a, Ord a, JSON b) => JSON (GenericContainer a b) 

type Container = GenericContainer StringSource

Type alias for string keys.

readContainer :: (Monad m, HasStringRepr a, Ord a, JSON b) => JSObject JSValue -> m (GenericContainer a b)Source

showContainer :: (HasStringRepr a, JSON b) => GenericContainer a b -> JSValueSource

newtype MaybeForJSON a Source

A Maybe newtype that allows for serialization more appropriate to the semantics of Maybe and JSON in our calls. Does not produce needless and confusing dictionaries.

Constructors

MaybeForJSON 

Fields

unMaybeForJSON :: Maybe a
 

Instances

JSON a => JSON (MaybeForJSON a)