Copyright | (c) Duncan Coutts 2015-2017 |
---|---|
License | BSD3-style (see LICENSE.txt) |
Maintainer | duncan@community.haskell.org |
Stability | experimental |
Portability | non-portable (GHC extensions) |
Safe Haskell | Safe |
Language | Haskell2010 |
High level API for encoding values, for later serialization into
CBOR binary format, using a
based interface.Monoid
- newtype Encoding :: * = Encoding (Tokens -> Tokens)
- data Tokens :: *
- = TkWord !Word Tokens
- | TkWord64 !Word64 Tokens
- | TkInt !Int Tokens
- | TkInt64 !Int64 Tokens
- | TkBytes !ByteString Tokens
- | TkBytesBegin Tokens
- | TkString !Text Tokens
- | TkStringBegin Tokens
- | TkListLen !Word Tokens
- | TkListBegin Tokens
- | TkMapLen !Word Tokens
- | TkMapBegin Tokens
- | TkTag !Word Tokens
- | TkTag64 !Word64 Tokens
- | TkInteger !Integer Tokens
- | TkNull Tokens
- | TkUndef Tokens
- | TkBool !Bool Tokens
- | TkSimple !Word8 Tokens
- | TkFloat16 !Float Tokens
- | TkFloat32 !Float Tokens
- | TkFloat64 !Double Tokens
- | TkBreak Tokens
- | TkEnd
- encodeWord :: Word -> Encoding
- encodeWord8 :: Word8 -> Encoding
- encodeWord16 :: Word16 -> Encoding
- encodeWord32 :: Word32 -> Encoding
- encodeWord64 :: Word64 -> Encoding
- encodeInt :: Int -> Encoding
- encodeInt8 :: Int8 -> Encoding
- encodeInt16 :: Int16 -> Encoding
- encodeInt32 :: Int32 -> Encoding
- encodeInt64 :: Int64 -> Encoding
- encodeInteger :: Integer -> Encoding
- encodeBytes :: ByteString -> Encoding
- encodeBytesIndef :: Encoding
- encodeString :: Text -> Encoding
- encodeStringIndef :: Encoding
- encodeListLen :: Word -> Encoding
- encodeListLenIndef :: Encoding
- encodeMapLen :: Word -> Encoding
- encodeMapLenIndef :: Encoding
- encodeBreak :: Encoding
- encodeTag :: Word -> Encoding
- encodeTag64 :: Word64 -> Encoding
- encodeBool :: Bool -> Encoding
- encodeUndef :: Encoding
- encodeNull :: Encoding
- encodeSimple :: Word8 -> Encoding
- encodeFloat16 :: Float -> Encoding
- encodeFloat :: Float -> Encoding
- encodeDouble :: Double -> Encoding
Encoding implementation
An intermediate form used during serialisation, specified as a
. It supports efficient concatenation, and is equivalent
to a specialised Monoid
type.Endo
Tokens
It is used for the stage in serialisation where we flatten out the Haskell data structure but it is independent of any specific external binary or text format.
Traditionally, to build any arbitrary
value, you specify
larger structures from smaller ones and append the small ones together
using Encoding
.mconcat
Since: 0.2.0.0
A flattened representation of a term, which is independent of any underlying binary representation, but which we later serialise into CBOR format.
Since: 0.2.0.0
Encoding
API for serialisation
Encoding
encodeWord :: Word -> Encoding #
Encode a
in a flattened format.Word
Since: 0.2.0.0
encodeWord8 :: Word8 -> Encoding #
Encode a
in a flattened format.Word8
Since: 0.2.0.0
encodeWord16 :: Word16 -> Encoding #
Encode a
in a flattened format.Word16
Since: 0.2.0.0
encodeWord32 :: Word32 -> Encoding #
Encode a
in a flattened format.Word32
Since: 0.2.0.0
encodeWord64 :: Word64 -> Encoding #
Encode a
in a flattened format.Word64
Since: 0.2.0.0
encodeInt8 :: Int8 -> Encoding #
Encode an
in a flattened format.Int8
Since: 0.2.0.0
encodeInt16 :: Int16 -> Encoding #
Encode an
in a flattened format.Int16
Since: 0.2.0.0
encodeInt32 :: Int32 -> Encoding #
Encode an
in a flattened format.Int32
Since: 0.2.0.0
encodeInt64 :: Int64 -> Encoding #
Encode an @Int64
in a flattened format.
Since: 0.2.0.0
encodeInteger :: Integer -> Encoding #
Encode an arbitrarily large @Integer
in a
flattened format.
Since: 0.2.0.0
encodeBytes :: ByteString -> Encoding #
Encode an arbitrary strict
in
a flattened format.ByteString
Since: 0.2.0.0
encodeBytesIndef :: Encoding #
Encode a token specifying the beginning of a string of bytes of
indefinite length. In reality, this specifies a stream of many
occurrences of encodeBytes
, each specifying a single chunk of the
overall string. After all the bytes desired have been encoded, you
should follow it with a break token (see
).encodeBreak
Since: 0.2.0.0
encodeString :: Text -> Encoding #
Encode a
in a flattened format.Text
Since: 0.2.0.0
encodeStringIndef :: Encoding #
Encode the beginning of an indefinite string.
Since: 0.2.0.0
encodeListLen :: Word -> Encoding #
Encode the length of a list, used to indicate that the following tokens represent the list values.
Since: 0.2.0.0
encodeListLenIndef :: Encoding #
Encode a token specifying that this is the beginning of an
indefinite list of unknown size. Tokens representing the list are
expected afterwords, followed by a break token (see
) when the list has ended.encodeBreak
Since: 0.2.0.0
encodeMapLen :: Word -> Encoding #
Encode the length of a Map, used to indicate that the following tokens represent the map values.
Since: 0.2.0.0
encodeMapLenIndef :: Encoding #
Encode a token specifying that this is the beginning of an
indefinite map of unknown size. Tokens representing the map are
expected afterwords, followed by a break token (see
) when the map has ended.encodeBreak
Since: 0.2.0.0
encodeBreak :: Encoding #
Encode a 'break', used to specify the end of indefinite length objects like maps or lists.
Since: 0.2.0.0
encodeTag64 :: Word64 -> Encoding #
Encode an arbitrary 64-bit
tag.Word64
Since: 0.2.0.0
encodeBool :: Bool -> Encoding #
Encode a
.Bool
Since: 0.2.0.0
encodeUndef :: Encoding #
Encode an Undef
value.
Since: 0.2.0.0
encodeNull :: Encoding #
Encode a Null
value.
Since: 0.2.0.0
encodeSimple :: Word8 -> Encoding #
Encode a 'simple' CBOR token that can be represented with an 8-bit word. You probably don't ever need this.
Since: 0.2.0.0
encodeFloat16 :: Float -> Encoding #
Encode a small 16-bit
in a flattened format.Float
Since: 0.2.0.0
encodeFloat :: Float -> Encoding #
Encode a full precision
in a flattened format.Float
Since: 0.2.0.0
encodeDouble :: Double -> Encoding #
Encode a
in a flattened format.Double
Since: 0.2.0.0