happstack-data-6.0.0: Happstack data manipulation libraries

Happstack.Data.Serialize

Synopsis

Documentation

class Version a where

The Version type class is used to describe whether a type is fundamental or if it is meant to extend another type. For a user defined type that does not extend any others, one can use the default instance of Version, e.g. instance Version MyType to define it has having a version id of 0 and previous type.

Methods

mode :: Mode a

class Migrate a b where

Migrate instances are needed to allow upgrades of MACID state. It should be declared as instance Migrate Old New where migrate = transition_function

Methods

migrate :: a -> b

data Mode a

Constructors

Primitive

Data layout won't change. Used for types like Int and Char.

Versioned (VersionId a) (Maybe (Previous a)) 

data Contained a

contain :: a -> Contained a

Lifts the provided value into Contained

extension :: forall a b. (Serialize b, Migrate b a) => VersionId a -> Proxy b -> Mode a

Creates a Mode that is a new version of the type carried by the provided proxy and with the provided version number. Note that since VersionId is an instance of Num that you may use int literals when calling extension, e.g. extension 1 (Proxy :: Proxy OldState)

safeGet :: forall a. Serialize a => Get a

Equivalent of Data.Binary.get for instances of Serialize Takes into account versioning of types.

safePut :: forall a. Serialize a => a -> Put

Equivalent of Data.Binary.put for instances of Serialize. Takes into account versioning of types.

getSafeGet :: forall a. Serialize a => Get (Get a)

getSafePut :: forall a. Serialize a => PutM (a -> Put)

serialize :: Serialize a => a -> ByteString

Pure version of safePut. Serializes to a ByteString

deserialize :: Serialize a => ByteString -> (a, ByteString)

Pure version of safeGet. Parses a ByteString into the expected type and a remainder.

collectVersions :: forall a. (Typeable a, Version a) => Proxy a -> [ByteString]

Version lookups

data Object

Uniform container for any serialized data. It contains a string rep of the type and the actual data serialized to a byte string.

mkObject :: Serialize a => a -> Object

Serializes data and stores it along with its type name in an Object

deserializeObject :: ByteString -> (Object, ByteString)

deserialize specialized to Objects

parseObject :: Serialize a => Object -> a

Attempts to convert an Object back into its base type. If the conversion fails error will be called.