ouroboros-consensus-0.1.0.0: Consensus layer for the Ouroboros blockchain protocol
Safe HaskellNone
LanguageHaskell2010

Ouroboros.Consensus.Util.Versioned

Synopsis

Documentation

data Versioned a Source #

Constructors

Versioned 

Instances

Instances details
Eq a => Eq (Versioned a) Source # 
Instance details

Defined in Ouroboros.Consensus.Util.Versioned

Methods

(==) :: Versioned a -> Versioned a -> Bool #

(/=) :: Versioned a -> Versioned a -> Bool #

Show a => Show (Versioned a) Source # 
Instance details

Defined in Ouroboros.Consensus.Util.Versioned

data VersionNumber Source #

Instances

Instances details
Eq VersionNumber Source # 
Instance details

Defined in Ouroboros.Consensus.Util.Versioned

Num VersionNumber Source # 
Instance details

Defined in Ouroboros.Consensus.Util.Versioned

Ord VersionNumber Source # 
Instance details

Defined in Ouroboros.Consensus.Util.Versioned

Show VersionNumber Source # 
Instance details

Defined in Ouroboros.Consensus.Util.Versioned

Serialise VersionNumber Source # 
Instance details

Defined in Ouroboros.Consensus.Util.Versioned

data VersionError Source #

Constructors

IncompatibleVersion VersionNumber String

We cannot deserialise the version of the data with the given VersionNumber because its data format is incompatible.

For example, the given format lacks data that was added in later version that cannot be reconstructed from scratch.

UnknownVersion VersionNumber

The given VersionNumber is unknown and thus not supported.

MigrationFailed VersionNumber String

A migration from the given VersionNumber failed. See Migrate.

data VersionDecoder a where Source #

How to decode a version of a format.

Constructors

Incompatible :: String -> VersionDecoder a

This version is incompatible, fail with IncompatibleVersion and the given message.

Decode :: (forall s. Decoder s a) -> VersionDecoder a

Decode the version using the given Decoder.

Migrate :: VersionDecoder from -> (from -> Either String to) -> VersionDecoder to

Decode an other format (from) and migrate from that. When migration fails, the version decoder will fail with MigrationFailed.

encodeVersion :: VersionNumber -> Encoding -> Encoding Source #

Given a VersionNumber and the encoding of an a, encode the corresponding Versioned a. Use decodeVersion to decode it.

decodeVersion :: [(VersionNumber, VersionDecoder a)] -> forall s. Decoder s a Source #

Decode a versioned a (encoded using encodeVersion or encodeVersioned).

The corresponding VersionDecoder for the deserialised VersionNumber is looked up in the given list. The first match is used (using the semantics of lookup). When no match is found, a decoder that fails with UnknownVersion is returned.