packages feed

msgpack-types-0.3.2: src/Data/MessagePack/Types/Object.hs

{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric      #-}
{-# LANGUAGE StrictData         #-}
{-# LANGUAGE Trustworthy        #-}
module Data.MessagePack.Types.Object
    ( Object (..)
    ) where

import           Control.DeepSeq (NFData (..))
import qualified Data.ByteString as S
import           Data.Int        (Int64)
import qualified Data.Text       as T
import           Data.Typeable   (Typeable)
import qualified Data.Vector     as V
import           Data.Word       (Word64, Word8)
import           GHC.Generics    (Generic)


-- | Object Representation of MessagePack data.
data Object
    = ObjectNil
      -- ^ represents nil
    | ObjectBool                  Bool
      -- ^ represents true or false
    | ObjectInt    {-# UNPACK #-} Int64
      -- ^ represents a negative integer
    | ObjectWord   {-# UNPACK #-} Word64
      -- ^ represents a positive integer
    | ObjectFloat  {-# UNPACK #-} Float
      -- ^ represents a floating point number
    | ObjectDouble {-# UNPACK #-} Double
      -- ^ represents a floating point number
    | ObjectStr                   T.Text
      -- ^ extending Raw type represents a UTF-8 string
    | ObjectBin                   S.ByteString
      -- ^ extending Raw type represents a byte array
    | ObjectArray                 (V.Vector Object)
      -- ^ represents a sequence of objects
    | ObjectMap                   (V.Vector (Object, Object))
      -- ^ represents key-value pairs of objects
    | ObjectExt    {-# UNPACK #-} Word8 S.ByteString
      -- ^ represents a tuple of an integer and a byte array where
      -- the integer represents type information and the byte array represents data.
    deriving (Read, Show, Eq, Ord, Typeable, Generic)

instance NFData Object