{-# OPTIONS_GHC -fno-warn-unused-imports #-} -- | -- Module : Codec.CBOR -- Copyright : (c) Duncan Coutts 2015-2017 -- License : BSD3-style (see LICENSE.txt) -- -- Maintainer : duncan@community.haskell.org -- Stability : experimental -- Portability : non-portable (GHC extensions) -- -- A library for working with CBOR. -- module Codec.CBOR ( -- $intro -- * Library Structure -- $structure ) where -- used by Haddocks import Codec.CBOR.Decoding (Decoder) import Codec.CBOR.Encoding (Encoding) import Codec.CBOR.FlatTerm (FlatTerm) import Codec.CBOR.Term (Term, encodeTerm, decodeTerm) {- $intro The @cborg@ library is a low-level parsing and encoding library for the Compact Binary Object Representation (CBOR) defined in RFC 7049. CBOR is a language-agnostic, extensible, and size- and computation-efficient encoding for arbitrary data, with a well-defined bijection to the ubiquitous JSON format and a precisely specified canonical form. Note, however, that @cborg@ does not itself aim to be a serialisation library; it merely serves as the substrate on which such a library might be built. See the [serialise](/package/serialise) library if you are looking for convenient serialisation of Haskell values. Instead, @cborg@ targets cases where precise control over the CBOR object structure is needed such as when working with externally-specified CBOR formats. -} {- $structure The library is split into a number of modules, * Decoding * "Codec.CBOR.Decoding" defines the machinery for decoding primitive CBOR terms into Haskell values. In particular, the 'Decoder' type and associated decoders, @ data 'Decoder' s a -- for, e.g., safe in-place mutation during decoding liftST :: ST s a -> 'Decoder' s a -- primitive decoders decodeWord :: 'Decoder' s Word decodeBytes :: 'Decoder' s ByteString -- et cetera @ * "Codec.CBOR.Read" defines the low-level wire-format decoder, e.g. @ 'Codec.CBOR.Read.deserialiseFromBytes' :: 'Decoder' a -> ByteString -> Either String (ByteString, a) @ * Encoding * "Codec.CBOR.Encoding" defines the 'Encoding' type, which is in essence difference-list of CBOR tokens and is used to construct CBOR encodings. @ data 'Encoding' instance Monoid 'Encoding' encodeWord :: Word -> Encoding encodeBytes :: ByteString -> Encoding -- et cetera @ * "Codec.CBOR.Write" defines the low-level wire-format encoder, e.g. @ 'Codec.CBOR.Write.toBuilder' :: 'Encoding' a -> Data.ByteString.Builder.Builder @ * Capturing arbitrary terms * "Codec.CBOR.Term" provides the 'Term' type, which provides a type for capturing arbitrary CBOR terms. 'Term's can be encoded and decoded with, @ data 'Term' = TInt Int | TBytes ByteString -- et cetera 'encodeTerm' :: 'Term' -> 'Encoding' 'decodeTerm' :: 'Decoder' 'Term' @ * Debugging * "Codec.CBOR.FlatTerm" contains the 'FlatTerm' type, which provides a concrete AST for capturing primitive CBOR wire encodings. This can be useful when testing decoders and encoders. -}