{-# LANGUAGE LambdaCase #-}

-- | Common types for binary format (parser and serializer)
module RON.Binary.Types where

import           RON.Prelude

type Size = Word32

-- | Data block descriptor
data Desc

    = DOpClosed
    | DOpReduced
    | DOpHeader
    | DOpQueryHeader

    | DUuidReducer
    | DUuidObject
    | DUuidOp
    | DUuidRef

    | DAtomUuidZip
    | DUuidZipObject
    | DUuidZipOp
    | DUuidZipRef

    | DAtomUuid
    | DAtomInteger
    | DAtomString
    | DAtomFloat

    deriving (Enum, Eq, Show)

-- | Does the descriptor refer to an op
descIsOp :: Desc -> Bool
descIsOp = \case
    DOpClosed       -> True
    DOpReduced      -> True
    DOpHeader       -> True
    DOpQueryHeader  -> True
    _               -> False